我无法找到有关此事的任何信息......这是一种奇怪的行为:
在这里使用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