JAXB如何在xml中删除默认的ns2名称空间前缀

时间:2019-11-08 05:25:46

标签: java xml jaxb xml-namespaces

在创建请求XML的默认“ ns2”前缀中添加了名称空间声明。

我正在获取以下格式的请求XML。

<ns2:ARTNCIS xmlns:ns2="http://namespace_uri">
    <ARTNCIS>
        <IDOCDATA>
            ...
        </IDOCDATA>
    </ARTNCIS>
</ns2:ARTNCIS>

期望的请求XML应该如下所示,

<ARTNCIS xmlns="http://namespace_uri">
    <ARTNCIS>
        <IDOCDATA>
          ...
        </IDOCDATA>
    </ARTNCIS>
</ARTNCIS>

下面提供的是package-info.java文件。

@XmlSchema(
    namespace = "http://namespace_uri",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
    xmlns={@XmlNs(prefix = "", namespaceURI = "http://namespace_uri")}
    )
package com.vam.abc.motor;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;

在封送处理JAXB元素时,添加了NamespacePrefixMapper来删除默认的“ ns2”前缀。查找以下代码,

NamespacePrefixMapper mapper = new NamespacePrefixMapper() {
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        if ("http://namespace_uri".equals(namespaceUri) && !requirePrefix)
            return "";
        return suggestion;
    }
};
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
marshaller.marshal(reqObject, document);

下面是我的根元素声明。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "artncis" })
@XmlRootElement(name = "ARTNCIS")
public class ARTNCIS {
...
}

0 个答案:

没有答案