結果の XML でstandalone="yes"が生成されないようにする JAXB 設定を知っていますか?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
結果の XML でstandalone="yes"が生成されないようにする JAXB 設定を知っていますか?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
JDK1.6 の一部である JAXB で
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
このプロパティ:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
...次のものを持たないように使用できます:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
ただし、このベストプラクティスは考慮しません。
どちらかを使用できます
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
また
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)
デフォルトの XML 宣言を無効にしてから、カスタム XML 宣言を追加するには、
<?xml version="1.0" encoding="UTF-8"?>
に
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
生成された xml に追加して、standalone="yes"プロパティを回避します。
他の誰かがまだこの問題に苦しんでいる場合は、使用を検討してください。
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
すべての XML 宣言を削除しString
、出力ストリーム / メソッドの先頭に独自のものを記述するだけです。
ドキュメントを依存するようにするとDOCTYPE
(名前付きエンティティを使用するなど)、スタンドアロンでstandalone="yes"
はなくなるため、XML 宣言では許可されません。
ただし、スタンドアロン XML はどこでも使用できますが、非スタンドアロンは外部をロードしない XML パーサーにとって問題があります。
XML をサポートしていないソフトウェアとの相互運用性以外に、この宣言がどのように問題になるかはわかりませんが、いくつかの恐ろしい正規表現スープです。
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
これはJDK1.7でうまくいきました。standalone=\"no\" を削除して、残りの xml 部分のみを取得できます
私には、コメントする「特権」を持つほどの「評判」がありません。;-)
@Debasis、指定したプロパティに注意してください。
"com.sun.xml.internal.bind.xmlHeaders"
次のようにする必要があります。
"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)
あなたがしたように「内部」プロパティを使用すると、javax.xml.bind.PropertyExceptionが発生します