如何使用 JAXB (JDK 7) 设置缺省名称空间



我在使用 JAXB 设置默认命名空间时遇到问题。我已经遵循了这里的提示,但问题仍然存在。这是我的包裹信息的样子:

@XmlSchema(
        namespace = "my/xml/namespace",
        xmlns = {
                @XmlNs(namespaceURI="my/xml/namespace",prefix=""),
        },
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package my.xml.namespace;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.XMLConstants;;

但仍然创建的 xml 如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:resp xmlns:ns2="my/xml/namespace">
....
</ns2:resp>

我想摆脱这些前缀,但没有想法。有人可能知道为什么?

更新

我遵循建议并实现命名空间前缀映射器,并且:

  1. 成为com.sun.xml.bind.marshaller.NamespacePrefixMapper至关重要。我使用了另一个并得到了奇怪的例外。

  2. 它也不起作用 - 同样的问题仍然存在。这是我的映射器:

    NamespacePrefixMapper

    mapper = new NamespacePrefixMapper(){

            @Override
            public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix)
            {
                if("amc/xml/pay03_entryresponse".equals(namespaceUri)) {
                    return "";
                }else return suggestion;
            }
        };
        marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
    

您必须使用命名空间映射器。

网络上有一些例子:

  • http://hwellmann.blogspot.co.at/2011/03/jaxb-marshalling-with-custom-namespace.html
  • http://java.dzone.com/articles/jaxb-and-namespace-prefixes

最新更新