2

一段时间以来,我无法将名称空间添加到属性。我的要求是创建 xml,它将在子元素而不是根元素上具有命名空间 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

谢谢

4

1 回答 1

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>

了解更多信息

于 2013-05-08T11:14:46.440 回答