SOAP - 当类名和类型具有相同名称时,XmlElement带注释的对象将作为null传递

时间:2017-03-20 08:31:23

标签: java soap annotations jersey-1.0 javax

我无法找到有关此事的任何信息......这是一种奇怪的行为:

在这里使用SOAP传递数据时 - 一切正常

@Data
@XmlRootElement
//@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Test")
public class Test {

     private TestInternal testInternalHello; //class: TestInternal and name testInternalHello have different names

}

这是xsd:

<xs:complexType name="myTest">
    <xs:sequence>
        <xs:element name="Test" type="tns:Test" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="Test">
    <xs:sequence>
        <xs:element name="testInternalHello" type="tns:TestInternal" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="TestInternal">
    <xs:sequence>
        <xs:element name="str1" type="xs:string" minOccurs="0"/>
        <xs:element name="str2" type="xs:string" minOccurs="0"/>
        <xs:element name="testAnother" type="tns:TestAnother" nillable="true"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="TestAnother">
    <xs:sequence>
        <xs:element name="lastTest" type="xs:boolean"/>
        <xs:element name="something" type="xs:string" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

如果我使用相同的名称 - 并传递完全相同的数据 - 该对象传递为null:

    @Data
@XmlRootElement
//@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Test")
public class Test {

     private TestInternal testInternal; //class: TestInternal and name testInternal have the same name

}

这是第二个:

<xs:complexType name="myTest">
    <xs:sequence>
        <xs:element name="Test" type="tns:Test" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="Test">
    <xs:sequence>
        <xs:element ref="tns:testInternal" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="TestInternal">
    <xs:sequence>
        <xs:element name="str1" type="xs:string" minOccurs="0"/>
        <xs:element name="str2" type="xs:string" minOccurs="0"/>
        <xs:element ref="tns:testAnother" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="TestAnother">
    <xs:sequence>
        <xs:element name="lastTest" type="xs:boolean"/>
        <xs:element name="something" type="xs:string" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

唯一可行的是,如果我添加一个@XmlElement注释与NILLABLE = true ...我只是无法理解为什么或如何解决它。我并不希望我的所有对象都是可存档的......而且我没有看到开始查看代码并更改所有相同名称的原因。

@Data
@XmlRootElement
//@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Test")
public class Test{

    @XmlElement(required = true, nillable = true)
    private TestInternal testInternal; //THIS WORKS

}

添加类和xml&amp; XSD

0 个答案:

没有答案