在解组xml文档时,JAXB无法解组具有替换组名的复杂类型。该文档带有替代名称,并且JAXB解组过程无法将数据与实际元素绑定。 最终,我在xml文档中得到了一个空对象,其数据已到达。这是JAXB中的错误,还是我在这里做错了什么?
注意:以下模式清楚地定义了有问题的复杂元素类型ENBFunction的替代名称。并且,在解组“ xn:ManagedElementOptionallyContainedNrmClass”时没有任何错误,但是Java类“ ENBFunction”中没有填充数据。
<element name="ENBFunction" substitutionGroup="xn:ManagedElementOptionallyContainedNrmClass">
<complexType>
<complexContent>
<extension base="xn:NrmClass">
<sequence>
<element name="attributes" minOccurs="0">
<complexType>
<all>
<element name="userLabel" type="string"/>
<element name="enbId" type="en:EnbId" minOccurs="0"/>
<element name="x2BlackList" type="xn:dnList" minOccurs="0"/>
<element name="x2WhiteList" type="xn:dnList" minOccurs="0"/>
<element name="x2HOBlackList" type="xn:dnList" minOccurs="0"/>
<element name="x2IpAddressList" type="string" minOccurs="0"/>
<element name="tceIDMappingInfoList" type="en:TceIDMappingInfoList" minOccurs="0"/>
<!-- linkList attribute is to be added when defined in the IS -->
</all>
</complexType>
</element>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="en:EUtranCellFDD"/>
<element ref="en:EUtranCellTDD"/>
<element ref="epc:EP_RP_EPS"/>
<element ref="en:ENBFunctionOptionallyContainedNrmClass"/>
<element ref="en:DeNBCapability"/>
<element ref="xn:VsDataContainer"/>
</choice>
<choice minOccurs="0" maxOccurs="1">
<element ref="sp:ESPolicies"/>
</choice>
<choice minOccurs="0" maxOccurs="1">
<element ref="sp:SONControl"/>
</choice>
<choice minOccurs="0" maxOccurs="1">
<element ref="sp:SONTargets"/>
</choice>
</sequence>
</extension>
</complexContent>
</complexType>
</element>
答案 0 :(得分:0)
主要问题在于我创建JAXBContext实例的方式。 JAXB提供了多种创建JAXBContext实例的方法:
static JAXBContext newInstance(Class... classesToBeBound)
Obtain a new instance of a JAXBContext class.
static JAXBContext newInstance(Class[] classesToBeBound, Map<String,?> properties)
Obtain a new instance of a JAXBContext class.
***static JAXBContext newInstance(String contextPath)
Obtain a new instance of a JAXBContext class.***
static JAXBContext newInstance(String contextPath, ClassLoader classLoader)
Obtain a new instance of a JAXBContext class.
static JAXBContext newInstance(String contextPath, ClassLoader classLoader, Map<String,?> properties)
Obtain a new instance of a JAXBContext class.
最初我是用第一个,
static JAXBContext newInstance(Class... classesToBeBound)
我在其中提供了所有要绑定的jaxb类,但不起作用。当我使用对象创建的第三种方法时,它起作用了,该方法采用一个字符串,该字符串具有用冒号分隔的包名称,所有jaxb类都驻留在该包名称中。
static JAXBContext newInstance(String contextPath)