[英]Getting UnmarshalException while creating JAVA objects from xsd for specific xml
我正在使用xsd使用maven-jaxb-plugin(com.sun.tools.xjc.maven2)创建Java对象。 从XML文件填充这些JAVA对象时,出现以下错误。
javax.xml.bind.UnmarshalException: Unexpected element "Clients". Expected elements are "{http://www.company.com/enigma/utils/export}Clients".
XSD具有以下结构,
targetNamespace="http://www.company.com/enigma/utils/export">
<xs:element name="Clients">
<xs:complexType>
<xs:sequence>
<xs:element name="Client">
<xs:annotation>
<xs:documentation>Client element represents Client in JSP pages and name attribute for it should be unique</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="column" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="header" use="required"/>
<xs:attribute type="xs:string" name="metaName" use="required"/>
<xs:attribute type="xs:string" name="dataType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="required"/>
<xs:attribute type="xs:string" name="useResource" use="required"/>
<xs:attribute type="xs:string" name="resourceFile" use="required"/>
</xs:complexType>
<xs:unique name="UniqueClientName">
<xs:selector xpath="Client"></xs:selector>
<xs:field xpath="@name"></xs:field>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML如下所示,
<?xml version="1.0" encoding="UTF-8"?>
<Clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Client name="ClientDetails" useResource="true">
<column header="ClientDetails.ClientName" metaName="name" dataType="String"/>
<column header="ClientDetails.PhysicalAddress" metaName="phyAddress" dataType="String"/>
<column header="ClientDetails.City" metaName="city" dataType="String"/>
<column header="ClientDetails.State" metaName="state" dataType="String"/>
</Client>
</Clients>
所有JAXB类都是使用maven生成的,并且位于enigma / utils / export文件夹中。 我无法解决此问题。 请帮我。
请通过提供生成的类包尝试以下代码。 根据您的xml,它应该是com.enigma.utils.export
JAXBContext jaxbContext = JAXBContext.newInstance("com.enigma.utils.export");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
这样可以解决问题。
感谢Narendra的回复。 我在示例中使用了相同的代码。 我发现问题出在目标名称空间上。 我在与xsd和voila相同的xml中添加了目标名称空间,该错误已清除。 请参阅下面的xml,
<?xml version="1.0" encoding="UTF-8"?>
<xsi:Clients xmlns:xsi=""http://www.company.com/enigma/utils/export"">
<Client name="ClientDetails" useResource="true">
<column header="ClientDetails.ClientName" metaName="name" dataType="String"/>
<column header="ClientDetails.PhysicalAddress" metaName="phyAddress" dataType="String"/>
<column header="ClientDetails.City" metaName="city" dataType="String"/>
<column header="ClientDetails.State" metaName="state" dataType="String"/>
</Client>
</Clients>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.