简体   繁体   English

从xsd为特定xml创建JAVA对象时获取UnmarshalException

[英]Getting UnmarshalException while creating JAVA objects from xsd for specific xml

I am using xsd to create java objects using maven-jaxb-plugin (com.sun.tools.xjc.maven2). 我正在使用xsd使用maven-jaxb-plugin(com.sun.tools.xjc.maven2)创建Java对象。 While populating these JAVA Objects from XML file I am getting following error. 从XML文件填充这些JAVA对象时,出现以下错误。

javax.xml.bind.UnmarshalException: Unexpected element "Clients". Expected elements are "{http://www.company.com/enigma/utils/export}Clients".

XSD has following structure, 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>

and XML is like below, 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>

All the JAXB classes are generated using maven and are in enigma/utils/export folder. 所有JAXB类都是使用maven生成的,并且位于enigma / utils / export文件夹中。 I don't able to solve this issue. 我无法解决此问题。 Please help me on this. 请帮我。

Please try this below code with giving package of generated classes. 请通过提供生成的类包尝试以下代码。 As per your xml it should be com.enigma.utils.export 根据您的xml,它应该是com.enigma.utils.export

JAXBContext jaxbContext = JAXBContext.newInstance("com.enigma.utils.export");
Unmarshaller  unmarshaller = jaxbContext.createUnmarshaller();

This may solve the problem. 这样可以解决问题。

Thank you Narendra for your reply. 感谢Narendra的回复。 I have used same code in my example. 我在示例中使用了相同的代码。 I found out that issue is with target namespace. 我发现问题出在目标名称空间上。 I added target namespace in xml same as xsd and voila, the error got cleared. 我在与xsd和voila相同的xml中添加了目标名称空间,该错误已清除。 Please see xml below, 请参阅下面的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM