Java Can';在XML文件中看不到名称空间前缀

Java Can';在XML文件中看不到名称空间前缀,java,jaxb,marshalling,Java,Jaxb,Marshalling,我分析了一些对象,但问题是JAXB编写默认名称空间前缀,而不是预定义的前缀。你知道是什么导致了这个问题吗 我期望看到的 <xbrli:entity> .... 不提供指定所用命名空间前缀的标准方法 扩展名-NamespacePrefixMapper 对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用NamespacePrefixMapper扩展来控制使用的名称空间前缀 MyNamespaceMapper import com.sun.xml.in

我分析了一些对象,但问题是JAXB编写默认名称空间前缀,而不是预定义的前缀。你知道是什么导致了这个问题吗

我期望看到的

<xbrli:entity>
....
不提供指定所用命名空间前缀的标准方法

扩展名-
NamespacePrefixMapper
对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用
NamespacePrefixMapper
扩展来控制使用的名称空间前缀

MyNamespaceMapper

import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
//import com.sun.xml.bind.marshaller.NamespacePrefixMapper;

public class MyNamespaceMapper extends NamespacePrefixMapper {

    private static final String FOO_PREFIX = ""; // DEFAULT NAMESPACE
    private static final String FOO_URI = "http://www.example.com/FOO";

    private static final String BAR_PREFIX = "bar";
    private static final String BAR_URI = "http://www.example.com/BAR";

    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        if(FOO_URI.equals(namespaceUri)) {
            return FOO_PREFIX;
        } else if(BAR_URI.equals(namespaceUri)) {
            return BAR_PREFIX;
        }
        return suggestion;
    }

    @Override
    public String[] getPreDeclaredNamespaceUris() {
        return new String[] { FOO_URI, BAR_URI };
    }

}
指定
名称空间前缀apper

下面是如何在
封送拆收器上设置
名称空间前缀apper
的示例

    Marshaller m = ctx.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    try {
        m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", new MyNamespaceMapper());
        //m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespaceMapper());
    } catch(PropertyException e) {
        // In case another JAXB implementation is used
    }
扩展-利用
@XmlSchema
EclipseLink JAXB(MOXy)和JAXB参考实现的最新版本将使用在包级别
@XmlSchema
注释上定义的名称空间前缀

@XmlSchema(
    elementFormDefault=XmlNsForm.QUALIFIED,
    namespace="http://www.example.com/FOO",
    xmlns={
        @XmlNs(prefix="", namespaceURI="http://www.example.com/FOO")
        @XmlNs(prefix="bar", namespaceURI="http://www.example.com/BAR")
    }
)
package blog.prefix;

import javax.xml.bind.annotation.*;
更多信息
不提供指定所用名称空间前缀的标准方法

扩展名-
NamespacePrefixMapper
对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用
NamespacePrefixMapper
扩展来控制使用的名称空间前缀

MyNamespaceMapper

import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
//import com.sun.xml.bind.marshaller.NamespacePrefixMapper;

public class MyNamespaceMapper extends NamespacePrefixMapper {

    private static final String FOO_PREFIX = ""; // DEFAULT NAMESPACE
    private static final String FOO_URI = "http://www.example.com/FOO";

    private static final String BAR_PREFIX = "bar";
    private static final String BAR_URI = "http://www.example.com/BAR";

    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        if(FOO_URI.equals(namespaceUri)) {
            return FOO_PREFIX;
        } else if(BAR_URI.equals(namespaceUri)) {
            return BAR_PREFIX;
        }
        return suggestion;
    }

    @Override
    public String[] getPreDeclaredNamespaceUris() {
        return new String[] { FOO_URI, BAR_URI };
    }

}
指定
名称空间前缀apper

下面是如何在
封送拆收器上设置
名称空间前缀apper
的示例

    Marshaller m = ctx.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    try {
        m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", new MyNamespaceMapper());
        //m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespaceMapper());
    } catch(PropertyException e) {
        // In case another JAXB implementation is used
    }
扩展-利用
@XmlSchema
EclipseLink JAXB(MOXy)和JAXB参考实现的最新版本将使用在包级别
@XmlSchema
注释上定义的名称空间前缀

@XmlSchema(
    elementFormDefault=XmlNsForm.QUALIFIED,
    namespace="http://www.example.com/FOO",
    xmlns={
        @XmlNs(prefix="", namespaceURI="http://www.example.com/FOO")
        @XmlNs(prefix="bar", namespaceURI="http://www.example.com/BAR")
    }
)
package blog.prefix;

import javax.xml.bind.annotation.*;
更多信息