解组xsd:base64Binary的问题

时间:2011-08-25 22:02:18

标签: xsd jaxb unmarshalling

JAXB从XSD base64Binary和hexBinary生成到字节数组。我有带base64Binary的xsd元素。这是严格的,不能改变。但是在这个元素中我们有hexBinary的值(有点困惑)。现在问题出在哪里。我不知道JAXB是如何解组这些元素的,但是有些东西对我来说并不是真的。因此,如果我的元素中可能存在hexBinary,那么它就会解组。但我的case元素有类型base64Binary和JAXB unmarshaling这些元素其他东西我错了。有没有办法改变JAXB如何处理这些元素并告诉他处理,因为这些元素将是hexBinary。 也许是令人困惑的问题,但我需要帮助。

所以在很短的时间内我有元素base64Binary,但我想告诉JAXB解组,因为这些将是hexBinary

我读了一些我必须创建新的XmlAdapter,但我不知道我应该在哪里使用它,因为我只有生成JAXB的类

更新:

我发现问题出在哪里。当元素在生成的类中是base64Binary时,它创建了这个

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

但是当它是hexBinary时,它会创建

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

所以现在我需要知道当我有base64Binary时如何说jaxb使用这些适配器 protected byte [] element

1 个答案:

答案 0 :(得分:2)

<强>更新

您应该能够使用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,以下示例演示了如何完成它: