2011-08-25 206 views
2

從XSD base64Binary和hexBinary生成的JAXB轉換爲字節數組。我有base64Binary的xsd元素。這是嚴格的,不能改變。但在這個元素中,我們有hexBinary的價值(是有點困惑)。而現在,這是問題。我不知道JAXB是如何解構這些元素的,但是有些東西對我來說不是可以解決的。因此,如果在我的元素中可能有hexBinary,它就解組了。但即時通訊我的情況元素有類型base64Binary和JAXB解組這些元素別的什麼是我錯了什麼。有沒有辦法改變JAXB處理這些元素的方式,並告訴他如何處理這些元素將是hexBinary。 可能令人困惑的問題,但我需要這些幫助。解組xsd時出現問題:base64Binary

所以在不久的方式我有元素base64Binary的,但我想告訴JAXB要解編,因爲這些會的hexBinary

我讀,我要創造新的XmlAdapter的東西,但我不知道,我應該使用它,因爲我剛纔這產生JAXB

UPDATE:

我發現這裏是一個問題。當元素是base64Binary的在生成的類創造了這個

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

但當它的hexBinary它所以現在創建

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

我需要知道怎麼說時,我有base64Binary的
JAXB使用這些適配器 保護字節[]元素

回答

2

UPDATE

你應該能夠做到你想要使用JAXB模式綁定文件像什麼如下:

<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> 

有幾個選項:

選項#1 - @XmlSchemaType

您可以使用@XmlSchemaType註釋來控制模式表示;

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

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

選項#2 - XmlAdapter

如果你想生成一個XML架構模型,並利用一個XmlAdapter代替,下面的例子演示瞭如何可以做到:

+0

是的但我怎麼能設置這在生成的類? – hudi

+0

@hudi - 我是否正確,你有在XML架構base64Binary,但相應的XML元素表示hexBinary數據? –

+0

你是對的 – hudi