java - 意外的 JAXB 错误

标签 java xml jaxb

从文档中可以清楚地看出,我需要使用以下内容来从我的 XML 文件/架构中进行简单的解码:

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)。这对我来说感觉不对。 编辑结束

以下内容出现在我的所有类文件的顶部,包括为我创建的 eclipse 的 XJC JAXB 插件:

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 架构新手,这是提供给我的),是:

<?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...>

我被难住了。

编辑结束

最佳答案

为此,请执行以下操作:

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

您需要具备以下一项或两项:

  • 该目录中的 ObjectFactory.class
  • jaxb.in​​dex 文件。该文件应包含该包中的类名列表。

其中任何一个都会描述 JAXB 应该可用的类。

关于java - 意外的 JAXB 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539792/

相关文章:

java - Distance To() 两地之间的距离不正确

java - 如何从java中的文本文件/文件夹中获取字数(不更改文件夹的读取顺序)

java - 在增加/减少 int 的值后如何将其值重置为 0

xml - 戈朗 : Unmarshal Self Closing Tags

java - JAXB 从 xsd 生成 java 类

java - JAXB - 属性 "Value"已定义。使用 <jaxb :property> to resolve this conflict

java - 将 Ctrl+C 发送到在 java 中启动的进程

java - 如何在 Java 中将锯齿状数组解析为单个变量?

java - org.dbunit.database.AmbigouslyTableNameException

java - 使用jaxb读取xml文档