【发布时间】:2012-04-30 12:57:36
【问题描述】:
我试图在编组xjc 生成的类实例时正确输出schemaLocation 属性。根元素类如下所示:
@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() 方法,这似乎是我所追求的(实际上,他们似乎委托package-info.java 中提供的 XmlSchema)。但是,我无法将ROOTELEMENT 的实例转换为这些类型中的任何一个。
【问题讨论】:
标签: java xml xml-serialization jaxb