0

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 フォルダーにあります。この問題を解決できません。これについて私を助けてください。

4

2 に答える 2

1

生成されたクラスのパッケージを指定して、以下のコードを試してください。あなたのxmlによると、それはcom.enigma.utils.exportでなければなりません

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

これで問題が解決する場合があります。

于 2013-03-21T09:35:17.730 に答える
0

ナレンドラさん、お返事ありがとうございます。私の例では同じコードを使用しました。問題はターゲット名前空間にあることがわかりました。xsdと出来上がりと同じように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> 
于 2013-04-01T05:47:50.150 に答える