2010-03-29 148 views
0

從文檔很顯然,我需要使用以下方法來得到一個簡單的解組從我的XML文件/模式出現:意外JAXB錯誤

JAXBContext jc = JAXBContext.newInstance("PackageName"); 

其中PACKAGENAME是我的包名。我看着在谷歌有點不得要領,找出爲什麼我那麼得到這個運行時錯誤:

Line:Col[2:142]:cvc-elt.1: Cannot find the declaration of element 'myconfig'. 
Line:Col[2:142]:unexpected element (uri:"http://www.w3.org", local:"myconfig"). Expected elements are <{}myconfig> 
Caught UnmarshalException 

編輯: 注:該插件逼我指定一個包名。我將它與我的所有應用程序類文件都放在同一個包中,因爲我希望將所有JAXB類和我的應用程序放在一起。如果我的軟件包是PackageName,則它會在PackageName.PackageName中創建所有JAXB類文件。然後我不得不將它們從PackageName.PackageName(它自動創建)移回到我的應用程序所在的樹中(PackageName)。這不適合我。 編輯結束

下發生在我所有的類文件的頂部,包括那些在XJC JAXB Eclipse插件爲我創造:

package PackageName; 

爲什麼發生這個錯誤?

編輯: 架構是相當大的,所以我不希望這一切粘貼在這裏,和ObjectFactory.java文件因此是相當大的。它開始

package PackageName; 

import javax.xml.bind.JAXBElement; 
import javax.xml.bind.annotation.XmlElementDecl; 
import javax.xml.bind.annotation.XmlRegistry; 
import javax.xml.namespace.QName; 

結束

/** 
* Create an instance of {@link JAXBElement }{@code <}{@link MyConfigType }{@code >}} 
* 
*/ 
@XmlElementDecl(namespace = "", name = "myconfig") 
public JAXBElement<MyConfigType> createMyconfig(MyConfigType value) { 
    return new JAXBElement<MyConfigType>(_Myconfig_QNAME, MyConfigType.class, null, value); 
} 

所以都比較標準。架構的頂部(我是一個XML架構newb,並提供給我)是:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified"> 

這也看起來很直接。根元素的模式是這樣的:

<xs:complexType name="MyConfigType"> 
    <xs:sequence> 
     <xs:element name="tips" type="TipType" minOccurs="0" 
      maxOccurs="unbounded"> 
      <xs:key name="unique_abc_id"> 
       <xs:selector xpath="./abc" /> 
       <xs:field xpath="@id" /> 
      </xs:key> 
      <xs:key name="unique_def_id"> 
       <xs:selector xpath="./def" /> 
       <xs:field xpath="@id" /> 
      </xs:key> 
     </xs:element> 
    </xs:sequence> 
    <xs:attribute ref="noNamespaceschemaLocation" /> 
</xs:complexType> 

所提供的配置,我正在要求它在同一時間開始解組驗證:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<myconfig xmlns="http://www.w3.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceschemaLocation="myconfig.xsd"> 
    <firsttag...> 

我難倒。

編輯結束

回答

1

對於這項工作:

JAXBContext jc = JAXBContext.newInstance("PackageName"); 

你需要有其中的一個或兩個:

  • 的ObjectFactory.class在該目錄中
  • 一個jaxb.in​​dex文件。該文件應該包含該包中的類名稱列表。

其中任何一個都會描述應該可用於JAXB的類。

+0

啊。對不起忘了提及,我已經有了xjc創建了objectfactory.java文件 - 它與模式引用文件一起使用。我下一步去哪裏? – volvox 2010-03-29 19:51:12

+0

@Mark Lewis我需要一些關於類本身的更多信息。它看起來是一個架構驗證問題,但沒有看到類,我不知道我是否可以告訴你很多。 – 2010-03-29 20:10:09

+0

感謝您的回答,我已經編輯了一些問題代碼到我的問題中,以充實一點。也許這會更深入地說明我的問題。謝謝IA – volvox 2010-03-29 21:06:35