我在将属性名称添加到属性中已经有一段时间了。我的要求是创建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
谢谢
答案 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>
了解更多信息