0

我找不到任何相关信息......这是一种奇怪的行为:

在此处使用 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 & xsd

4

0 回答 0