2011-08-25 2 views
2

JAXB généré à partir de XSD base64Binary et hexBinary à tableau d'octets. J'ai un élément xsd avec base64Binary. Ceci est strict et ne peut pas être changé. Mais dans cet élément nous avons la valeur de hexBinary (oui un peu confus). Et maintenant où c'est un problème. Je ne sais pas comment est JAXB unmarshaling ces éléments, mais il y a quelque chose qui ne me convient pas. Donc s'il peut y avoir hexBinary dans mon élément, c'est unmarshaling juste. Mais im mon élément de cas a type base64Binary et JAXB unmarshaling ces élément quelque chose d'autre ce qui ne va pas à moi. Y a-t-il un moyen de changer la façon dont JAXB gère ces éléments et lui dire de les manipuler car ces éléments seraient hexBinary. question peut-être confuse mais j'ai besoin d'aide avec ceux-ci.Problème avec unmarshaling xsd: base64Binary

donc à peu comme j'ai élément base64Binary mais je veux dire JAXB à unmarshaling que ceux-ci seront hexBinary

je lis quelque chose que je dois créer un nouveau XMLAdapter mais je ne sais pas où dois-je l'utiliser parce que je ont seulement des classes qui ont généré JAXB

MISE à JOUR:

J'ai trouvé où est un problème. lorsque l'élément est base64Binary en classe générée a créé cette

XmlElement(name="name") protected byte[] element 

mais quand il est hexBinary il crée

XmlJavaTypeAdapter(HexBinaryAdapter.class) XmlElement(name="name") protected byte[] element 

maintenant je dois savoir comment dire JAXB d'utiliser ces adaptateur lorsque je base64Binary
octet protégé [] élément

Répondre

2

UPDATE

Vous devriez être en mesure de faire ce que vous voulez en utilisant un fichier de liaisons de schéma JAXB comme ce qui suit:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jxb:bindings schemaLocation="YourSchema.xsd"> 
     <jxb:bindings node="//xs:element[@name='element']"> 
      <jxb:property> 
       <jxb:baseType> 
        <jxb:javaType name="byte[]" 
         parseMethod="javax.xml.bind.DatatypeConverter.parseHexBinary" 
         printMethod="javax.xml.bind.DatatypeConverter.printHexBinary"/> 
       </jxb:baseType> 
      </jxb:property> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

Il y a deux options:

Option 1-@XmlSchemaType

Vous pouvez utiliser l'annotation @XmlSchemaType pour contrôler la représentation du schéma;

@XmlSchemaType(name="hexBinary") 
private byte[] hexBinary; 

@XmlSchemaType(name="base64Binary") 
private byte[] base64Binary; 

Option 2 - XmlAdapter

Si vous voulez générer votre modèle à partir d'un schéma XML et tirer parti d'un XMLAdapter à la place, l'exemple suivant montre comment cela pourrait se faire:

+0

Oui, mais comment puis-je définir cela dans la classe générée? – hudi

+0

@hudi - Ai-je raison de dire que vous avez base64Binary dans le schéma XML, mais l'élément XML correspondant représente les données hexBinary? –

+0

oui vous avez raison – hudi