Oracle フォーラム、Stackoverflow、java.net でこれに関するすべての投稿を読んだ後、最終的にここに投稿します。私は JAXB を使用して XML ファイルを作成していますが、問題は、要素の前に有名なns2プレフィックスが追加されることです。誰も私のために働いていないすべてのソリューションを試しました。java -version は「1.6.0_37」を与える
解決策 1 : package-info.java を使用する
次の内容の @Xml* アノテーション付きクラスを含むパッケージにファイルを作成しました。
@XmlSchema(
namespace = "http://mynamespace",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(namespaceURI = "http://mynamespace", prefix = "")
}
)
package com.mypackage;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
解決策 2 : NamespacePrefixMapper
次のクラスを作成し、マッパーをマーシャラーに設定しました。
// Change mapper to avoid ns2 prefix on generated XML
class PreferredMapper extends NamespacePrefixMapper {
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
return "";
}
}
NamespacePrefixMapper mapper = new PreferredMapper();
try {
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
}
catch (PropertyException e) {
logger.info("No property for com.sun.xml.bind.namespacePrefixMapper found : " + e.getMessage());
}
com.sun.xml.bind.namespacePrefixMapperでは何も起こらず、com.sun.xml.internal.bind.namespacePrefixMapperでは例外がスローされます。
pom に maven の依存関係も追加しましたが、JRE バージョンの方が優先度が高いようです。
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4</version>
</dependency>
これについて私を助けてもらえますか?
PS : ビルド上の理由から、jar をクラスパスに直接含めることはできません。PS2 : JDK7 を使用できません。前もって感謝します。