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
答案 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,以下示例演示了如何完成它: