JAXB2将xmlns添加到XML输出

时间:2015-05-28 11:28:43

标签: java xml xml-namespaces jaxb2

我看到其他时间已经问到了这个问题我已经回答了答案但是我应该承认我仍然无法获得所需的输出:( 现在我想拥有的是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tokenregistrationrequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="TOKEN">
    <purchase>true</purchase>
</tokenregistrationrequest>

我的班级定义如下:

@XmlRootElement() //THIS HAS BEEN ADDED MANUALLY
public class Tokenregistrationrequest {

    protected boolean purchase;

我已经修改了包裹信息,如下所示:

@javax.xml.bind.annotation.XmlSchema(xmlns = {
                                                @javax.xml.bind.annotation.XmlNs(prefix = "xsi", namespaceURI = "http://www.w3.org/2001/XMLSchema-instance"),
                                                @javax.xml.bind.annotation.XmlNs(prefix = "xs", namespaceURI = "http://www.w3.org/2001/XMLSchema"),
                                                @javax.xml.bind.annotation.XmlNs(prefix = "", namespaceURI = "TOKEN")
                                             }
                                    )

当我运行代码时,我得到的只是......

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tokenregistrationrequest>
    <purchase>true</purchase>
</tokenregistrationrequest>

我很确定我错过了一些基本的东西...... 任何帮助将非常感谢

编辑:在进行更多测试时我已经看到,在编译我的测试类时,JAXB工件被编译但不是package-info.java。这是因为使用它是可选的吗?

干杯

2 个答案:

答案 0 :(得分:0)

包级别上的注释XmlNs将前缀绑定到命名空间。但是,如果未使用Namespace,就像您的情况一样,Namespace节点将不会添加到根元素中。

您应该将Tokenregistrationrequest放入TOKEN命名空间:

@XmlRootElement(namespace = "TOKEN") //THIS HAS BEEN ADDED MANUALLY
public class Tokenregistrationrequest {

    protected boolean purchase;

这将导致

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tokenregistrationrequest xmlns="TOKEN">
    <purchase>true</purchase>
</tokenregistrationrequest>

其余的前缀声明不会出现,因为结果文档中没有来自这些命名空间的节点。如果有的话,前缀声明也应序列化。

答案 1 :(得分:0)

问了问题已经有一段时间了,但是我发现自己也处于类似情况。这有点令人不安,但是如果您真的坚持的话,可以用这种方法。

您只需手动将这些属性添加为实体类的属性即可。

@XmlAttribute(name = "xmlns")
private String token = "TOKEN";

@XmlAttribute(name = "xmlns:xsd")
private String schema = "http://www.w3.org/2001/XMLSchema";

@XmlAttribute(name = "xmlns:xsi")
private String schemaInstance = "http://www.w3.org/2001/XMLSchema-instance";

那么您应该将其作为输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tokenregistrationrequest xmlns="TOKEN" 
                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <purchase>true</purchase>
</tokenregistrationrequest>