我正在尝试在编组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 code generation - “schemaLocation” missing in xml generated by Marshaller的答案建议设置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
实例转换为任何类型的实例。
答案 0 :(得分:3)
您需要抓住包裹(例如,如果ROOTELEMENT在您想要的包装中,则使用ROOTELEMENT.class.getPackage()
)。然后您可以按照以下步骤进行处理:
Package package = // Here retrieve the package;
String namespace = package.getAnnotation(XmlSchema.class).namespace();
...etc...