当前位置: 首页 > 知识库问答 >
问题:

JAXB无package-info.java

澹台锐
2023-03-14

如果没有package-info.java文件,JAXB解组器会抛出异常。此代码是从另一种语言调用的,自定义类加载器无法正确加载包信息。

我已经手动将命名空间参数添加到所有@XmlElement注释中。

Xml 根元素具有多个 xmlns 属性。其中两个(xmlns和xmlns:c)具有相同的值(我无法更改xml,它来自外部服务)

但是:如果我从文档中删除xmlns="urn:foo:bar ",即使没有package-info,它也能工作

问题:如果没有包信息(我不能修改无法加载它的自定义类加载器)并且不从xml中删除xmlns,我如何解封?我应该在我的代码中更改什么?

Java 1.6_45 vJAXB 2.1.10

XML 根元素示例:

<?xml-stylesheet type="text/xsl" href="file1.xslt">
<?xml-stylesheet type="text/xsl" href="file1.xslt"?>
<c:ClinicalDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="urn:foo:ba" xmlns:c="urn:foo:bar" xmlns:std="urn:foo:std"
 xsi:schemaLocation="urn:foo:bar file2.xsd">

代码:

String path = "D:\\data\\document.xml";

    try {
        JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);
        Unmarshaller u = jc.createUnmarshaller();
        Object root = u.unmarshal(new File(path)); //exception w/o package-info.java

        CDocument doc= (CDocument) JAXBIntrospector.getValue(root);
        System.out.println(doc);

package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "urn:foo:bar", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns={@XmlNs(namespaceURI = "urn:foo:bar", prefix = "")})
package test.model;

    import javax.xml.bind.annotation.XmlNs;

例外:

javax.xml.bind.UnmarshalException: Unable to create an instance of my.package.here.model.ANY

任何想法都会受到极大的赞赏,我花了这么多时间尝试,但仍然一无所有。

共有1个答案

严嘉良
2023-03-14
BUT: It works if I remove xmlns="urn:foo:bar" from document even without package-info

这意味着您没有在所有需要的地方添加< code>namespace参数。

在下面没有映射命名空间限定的< code>@XmlSchema批注的XML文档中,您需要< code>Foo类的< code>@XmlRootElement批注上的< code>namespace参数和< code>bar属性上的< code>@XmlElement批注。

<foo xmlns="http://www.example.com">
    <bar>Hello World</bar>
</foo>
 类似资料:
  • 我需要生成一个XML文档,开头如下:

  • 我一直在使用 annox 在我的 jaxb 生成的类上添加注释(通过绑定文件),但我找不到直接在包上添加注释的方法(包信息.java)。 我一直在尝试在bindings.xml中这样做: 但是jaxb抱怨说< code>annox:annotate不应该在那里。 还有别的方法吗?

  • 描述 (Description) 此函数将当前符号表的名称更改为NAME。 包名称的范围是封闭块的末尾。 如果省略NAME,则没有当前包,并且必须使用其完全限定名称声明所有函数和变量名称。 语法 (Syntax) 以下是此函数的简单语法 - package NAME package 返回值 (Return Value) 此函数不返回任何值。 要了解package关键字检查Perl Modules

  • 主要内容:1 Java.lang Package介绍,2 Java.lang Package声明,3 Java.lang Package方法,4 Java.lang Package案例1 Java.lang Package介绍 java.lang.Package 类包含有关Java包的实现和规范版本信息 2 Java.lang Package声明 3 Java.lang Package方法 方法 描述 <A extends Annotation> A getAnnotation(Class<A>

  • Submodules oss2.api module 文件上传方法中的data参数。 诸如 基类:oss2.api._Base 用于Bucket和Object操作的类,诸如创建、删除Bucket,上传、下载Object等。 用法(假设Bucket属于杭州区域): >>> import oss2 >>> auth = oss2.Auth('your-access-key-id', 'your-acc

  • 在本章中,我们将学习如何开始使用Natural Language Toolkit Package。 先决条件(Prerequisite) 如果我们想用自然语言处理来构建应用程序,那么上下文的变化会使其变得非常困难。 上下文因素影响机器如何理解特定句子。 因此,我们需要使用机器学习方法开发自然语言应用程序,以便机器也能理解人类理解上下文的方式。 要构建这样的应用程序,我们将使用名为NLTK(Natu