我使用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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top