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

在Java中使用JAXB映射命名空间

锺离浩慨
2023-03-14

目前,我正在映射一个命名空间,通过创建一个包的package-info.java文件与以下注释。

@XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED,
namespace = "http://example.com",
xmlns = {
    @XmlNs(prefix = "i",
    namespaceURI = "http://www.w3.org/2001/XMLSchema-instance")
})

正如您所看到的,我的一个命名空间没有前缀,而另一个命名空间有前缀,这目前是有效的,但我想要另一种映射命名空间的方式,而不必创建单独的文件,任何人都知道我如何将命名空间映射放在类中的注释旁边?

在我的XML中,名称空间声明位于根元素中,如下所示:

<RootElement xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.com">...

我的类声明和注释类似于根元素的下面。

@XmlRootElement(name="RootElement)
public static class RootElement{
   ........
} 

谢谢

共有1个答案

鄢承运
2023-03-14

我希望以下帮助:

程序包信息

@XmlSchema(
        elementFormDefault = XmlNsForm.QUALIFIED,
        namespace = "http://example.com")
package forum20127191;

import javax.xml.bind.annotation.*;

RootElement(根元素)

package forum20127191;

import javax.xml.bind.annotation.*;

@XmlRootElement(name="RootElement")
public class RootElement {

    private String foo;

    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }

}

如果您不希望在包级别@XmlSchema注释中指定命名空间限定,则需要对元素的每个映射进行命名空间限定。您的 RootElement 类需要更改为外观。

package forum20127191;

import javax.xml.bind.annotation.*;

@XmlRootElement(name="RootElement", namespace="http://example.com")
public class RootElement {

    private String foo;

    @XmlElement(namespace="http://example.com")
    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }

}
  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
 类似资料:
  • 假设我在resources/a目录下有一个.xsd文件,在resources/b目录下有一个b.xsd文件。a、 xsd和b.xsd有自己的名称空间:http://a.com和http://b.com.最后,a.xsd导入b.xsd。 我想配置maven-jaxb2-plugin,以便在com包中生成A.java。包com中的a和B.java。B 如何将一个命名空间中的所有xsd文件绑定到一个包,

  • 这是我的包信息级别映射 这是我的输入xml(只是根元素) 您可以注意到URI“http://www.company.com/commons“使用不同的前缀映射。<br>解组工作正常,使用 在一些输入修改之后,我需要将文件持久化(使用原始的名称空间前缀)。 问题是:< br >在解组期间,有什么方法可以检索名称空间/前缀映射吗?

  • 这是我的xml,需要把它转换成Java。我使用了jaxb 并抛出以下异常javax.xml.bind.unmarshalException:意外元素(URI:“http://www.ae.com/event/load”,local:“order”)。需要的元素为<{}LM:order>

  • 我有一个xml,我正在尝试解体。它失败,因为它缺少必需的命名空间。 需要成为: 这个NamespaceFilter的例子只处理一个名称空间。我需要一个将追加两个名称空间。

  • 我试图从通过JAXB生成的类序列化XML。 班级: 文件“package-info.java”: 编组器(简化,无需错误处理): 此代码生成: 我期待这样的事情: 我有一个类似的代码并且工作正常,但是我不明白为什么这个代码不显示命名空间。有线索吗?谢谢!

  • 我有情况, 有一个sample.xsd(旧版本-没有命名空间)。为同一个XSD文件使用XJC生成JAXB类。我得到了一个使用JAXB类基于XSD解封XML数据文件的示例。sample.xsd文件已更改(新版本-添加的命名空间)。再次为新的XSD文件使用XJC生成JAXB类。该示例已更新,现在可以用于新的XSD文件 现在我有一个情况,我正在获取基于旧XSD的XML数据文件,我想使用更新的示例文件来解