我找不到任何相关信息......这是一种奇怪的行为:
在此处使用 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