1

一部のオブジェクトをマーシャリングしますが、問題は JAXB が定義済みの名前空間プレフィックスではなくデフォルトの名前空間プレフィックスを書き込むことです。この問題の原因は何ですか?

私が期待するもの。

<xbrli:entity>
....

私が得たもの;

<ns3:entity>
....

すべてのクラスを生成しました(パッケージ情報を含む)

例のパッケージ情報;

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.xbrl.org/2003/instance",
    xmlns = {
@XmlNs(namespaceURI = "http://www.xbrl.org/2003/instance", prefix = "xbrli2")
},
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.xbrl._2003.instance;

import javax.xml.bind.annotation.XmlNs;
4

1 に答える 1

1

JAXB (JSR-222)は、使用される名前空間プレフィックスを指定する標準的な方法を提供しません。

拡大 -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 };
    }

}

指定するNamespacePrefixMapper

以下は、 でNamespacePrefixMapperを設定する方法の例ですMarshaller

    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

@XmlSchemaEclipseLink JAXB (MOXy)および最近のバージョンのJAXB参照実装では、パッケージ・レベルの注釈で定義された名前空間接頭辞が使用されます。

@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.*;

詳細については

于 2013-10-24T13:41:33.887 に答える