生成されたクラスインスタンスschemaLocation
をマーシャリングするときに、属性を適切に出力しようとしています。xjc
ルート要素クラスは次のようになります。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"rootElement"
})
@XmlRootElement(name = "ROOTELEMENT")
public class ROOTELEMENT {
// Members
}
package-info.java
生成されたすべてのクラスが含まれるパッケージに、次の内容のクラスが含まれていることがわかります。
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://my.own.namespace",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package my.generated.classes.package;
JAXB XJCコード生成への答え-マーシャラーによって生成されたxmlに欠落している「schemaLocation」は、プロパティの設定を提案し、 Marshaller.JAXB_SCHEMA_LOCATION
実際に機能します。
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://my.own.namespace my_schema.xsd");
ただし、次のように名前空間を入力することは避けたいと思います。
String namespace = getNamespace(rootElementInstance);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, namespace + " my_schema.xsd");
getNamespace()
関数の実装方法に関するヒントをいただければ幸いです。
編集:XmlRootElement
とXmlType
アノテーションにnamespace()
メソッドがあることを確認しました。これは私が求めているもののようです(実際には、でXmlSchema
提供されているものを委任しているようですpackage-info.java
)。ROOTELEMENT
ただし、これらのタイプのいずれにもキャストされたインスタンスを取得できません。