J'essaye de générer des POJO via le plugin maven JAXB pour analyser le XML que j'ai. J'ai un élément de niveau racine dans mon XML qui a un espace de noms qui est différent des autres éléments à l'intérieur. Voici le XML:XSD: Les éléments importés d'un espace de noms différent occupent l'espace de noms cible du parent lors de la génération de POJOs via le plugin Jaxb
<?xml version="1.0" encoding="UTF-8"?>
<skuFlatFileType xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd" xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<FlattenedSKU>
<ns0:SKU></ns0:SKU>
</FlattenedSKU>
</skuFlatFileType>
Depuis FlattenedSKU et SKU sont dans les différents espaces de noms. J'ai donc déclaré un XSD séparé pour tous les éléments sous FlattenedSKU, puis je l'ai importé dans le fichier parent. Le regard XSD comme ceci:
sku_wrapper.xsd
<xs:schema
xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
targetNamespace="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<xs:import namespace="http://www.xyz/schemas/dbm/product/V1"
schemaLocation="sku.xsd" />
<xs:element name="FlattenedSKU">
<xs:complexType>
<xs:sequence>
<xs:element name="SKU" type="ns0:SKU"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Le xsd enfant est comme suit:
sku.xsd
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns="http://www.xyz/schemas/dbm/product/V1"
targetNamespace="http://www.xyz/schemas/dbm/product/V1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SKU">
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:schema>
Maintenant, la classe java généré ressemble à ceci:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd", required = true)
protected SKU sku;
Mais ce que je dois est la suivante:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.xyz/schemas/dbm/product/V1", required = true)
protected SKU sku;
quelqu'un peut me dire ce que je fais mal?
est-ce pas la génération correcte de JAXB? Votre élément SKU est défini dans l'espace de noms '' http: // www.abc/schemas/xyz/sdf/Schemas/Schema.xsd' '' Seul son TYPE est défini dans un espace de noms différent selon votre schéma – Optional
Je ne suis pas J'ai suivi cette réponse: http://stackoverflow.com/questions/6413145/xsd-with-elements-from-other-namespace mais cela n'a pas fonctionné Avez-vous une idée de comment réaliser ce que je suis? –
Vous venez de poster ma réponse, veuillez comprendre la différence entre "créer" un élément de type et y faire référence Quand vous créez un élément d'un type défini dans un autre schéma, cet élément nouvellement créé appartient à l'espace de nom de schéma que vous ajoutez – Optional