jaxb xmlElement命名空间不起作用

时间:2013-05-08 10:47:17

标签: namespaces jaxb

我在将属性名称添加到属性中已经有一段时间了。我的要求是创建xml,它将在子元素而不是root上具有名称空间uri。我正在使用jaxb和eclipselink moxy,jdk7。

<document>
<Date> date </Date>
</Type>type </Type>
<customFields xmlns:pns="http://abc.com/test.xsd">
  <id>..</id>
  <contact>..</contact>
</customFields>
</document>

Classes are:

@XmlRootElement(name = "document")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"type","date", "customFields"})
public class AssetBean {

@XmlElement(name="Type")
private String type;
@XmlElement(name="Date")


@XmlElement(name = "CustomFields",namespace = "http://api.source.com/xsds/path/to/partner.xsd")    
private CustomBean customFields = new CustomBean();

//getters/setters here

}

public class CustomBean {

 private String id;
 private String contact;
 //getter/setter
}
package-info.java
@javax.xml.bind.annotation.XmlSchema (        
 xmlns = { 
 @javax.xml.bind.annotation.XmlNs(prefix="pns",
           namespaceURI="http://api.source.com/xsds/path/to/partner.xsd")
 },
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED
)
package com.abc.xyz

我按照这篇文章寻求帮助,但无法得到我正在尝试的内容 http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

谢谢

1 个答案:

答案 0 :(得分:1)

域模型(根)

在下面的域对象中,我将使用@XmlElement注释为其中一个元素指定命名空间。

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    String foo;

    @XmlElement(namespace="http://www.example.com")
    String bar;

}

演示代码

在下面的演示代码中,我们将创建一个域对象的实例并将其编组为XML。

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Root root = new Root();
        root.foo = "FOO";
        root.bar = "BAR";

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}

<强>输出

以下是运行演示代码的输出。我们使用@XmlElement注释为命名空间分配的元素是正确的命名空间限定的,但是命名空间声明出现在根元素上。

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:ns0="http://www.example.com">
   <foo>FOO</foo>
   <ns0:bar>BAR</ns0:bar>
</root>

了解更多信息