有没有办法使用JAXB从非根元素以编程方式获取命名空间?
我可以在根元素上使用以下内容(其中Detailedreport是根元素对象):
QName qname = jaxb.getJaxbContext().createJAXBIntrospector().getElementName( new Detailedreport());
final String namespace = qname.getNamespaceURI();
但是,如果我尝试使用同一个包中的类型,但是非root元素,则qname为null。
根据javadocs for JAXBIntrospector:
参数对象是以下情况的JAXB元素:
它是javax.xml.bind.JAXBElement的一个实例。对象类 用@XmlRootElement注释。
鉴于我的非root元素显然没有@XmlRootElement,有没有办法为它获取qname / namespace?
或者,有没有办法在程序上确定哪个类表示包中的根元素(不必自己扫描所有类的注释)?我在package-info.java文件中看到了命名空间,但不确定如何获取它。
答案 0 :(得分:4)
我在这里留下了这个问题,以防其他人遇到同样的问题。
包的名称空间位于package-info.java文件中。可以使用java方法直接检索此信息:
String namespace = XmlElementName.class.getPackage().getAnnotation(XmlSchema.class).namespace();