在编码 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");
但我想避免输入 namespace ,如下所示:
String namespace = getNamespace(rootElementInstance);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, namespace + " my_schema.xsd");
如果有任何有关如何实现 getNamespace()
函数的提示,我将不胜感激。
编辑:我已经看到 XmlRootElement
和 XmlType
注释具有 namespace()
方法,这似乎就是我所追求的(实际上,他们似乎委托(delegate)了 package-info.java
中提供的 XmlSchema
)。但是,我无法将 ROOTELMENT
实例转换为任何这些类型。
最佳答案
您需要捕获您的包(例如,如果 ROOTELMENT 位于您想要的包中,则使用 ROOTELMENT.class.getPackage()
)。然后您可以简单地进行如下处理:
Package package = // Here retrieve the package;
String namespace = package.getAnnotation(XmlSchema.class).namespace();
...etc...
关于java - 在运行时获取 @XmlType 的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384104/