JAXB从非根元素获取命名空间?

时间:2015-10-06 15:18:32

标签: java jaxb xml-namespaces

有没有办法使用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文件中看到了命名空间,但不确定如何获取它。

1 个答案:

答案 0 :(得分:4)

我在这里留下了这个问题,以防其他人遇到同样的问题。

包的名称空间位于package-info.java文件中。可以使用java方法直接检索此信息:

    String namespace = XmlElementName.class.getPackage().getAnnotation(XmlSchema.class).namespace();