JAXB XmlID和XmlIDREF注释(架构到Java)
题
我使用CXF暴露的Web服务。我使用的@XmlID和@XmlIDREF JAXB注解编组/解组期间保持我的对象图的参照完整性。
在WSDL正确地包含与XS元素:ID和xs:IDREF属性来表示此
。在服务器端,一切正常真的很好。与@XmlIDREF注释类型的实例是相同的情况下(如在==)到那些与@XmlID注解
然而,当我生成WSDLToJava客户端时,引用(那些具有@XmlIDREF注解)是java.lang.Object类型的。
时有可以自定义JAXB绑定的任何方式,使得类型的引用的或者是java.lang.String中(以匹配引用的类型的ID)或相同的引用类型本身?
解决方案 3
OK,所以这是行不通的。这是不可能的JAXB生成具有正确类型的代码IDREF的,因为该模式不能指定类型的引用,并有可能是IDREF的指向不同复杂类型。 JAXB怎么会知道是什么类型的引用?到XML模式的扩展会做到这一点! :)
其他提示
使用内联JAXB绑定,以指示要使用的类型。然后JAXB生成的代码将具有正确的类型。
<complexType name="Column">
<sequence>
<element name="name" type="string" maxOccurs="1" minOccurs="1"></element>
<element name="referencedColumn" type="IDREF" maxOccurs="1" minOccurs="0">
<annotation>
<appinfo>
<jaxb:property>
<jaxb:baseType name="Column"/>
</jaxb:property>
</appinfo>
</annotation>
</element>
</sequence>
<attribute name="id" type="ID" use="required"></attribute>
</complexType>
另外请注意,您必须声明中jaxb
元素的schema
命名空间和JAXB版本。
<schema targetNamespace="http://example.com/schema"
elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="1.0">
下面似乎至少创建类型xs元素/属性的字符串的属性:IDREF。作为元素被引用的一个良好的开端,但理想的JAXB将生成相同类型的属性。如果/当我发现怎么做,我马上汇报。这个结果可能表明,我需要写我自己的转换器,将是一种耻辱。
<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:globalBindings>
<jxb:javaType name="java.lang.String" xmlType="xs:IDREF" parseMethod="javax.xml.bind.DatatypeConverter.parseString" printMethod="javax.xml.bind.DatatypeConverter.printString" />
</jxb:globalBindings>
</jxb:bindings>
不隶属于 StackOverflow