2010-03-29 126 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