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

JAXB Get namespace from non-root element?

有没有办法使用 JAXB 从非根元素以编程方式获取命名空间?

我可以在根元素上使用以下内容(其中 Detailedreport 是根元素对象):

    QName qname = jaxb.getJaxbContext().createJAXBIntrospector().getElementName( new Detailedreport());
    final String namespace = qname.getNamespaceURI();

但是,如果我尝试使用同一包中的类型,但不是根元素,则 qname 为空。

根据javadocs for JAXBIntrospector

Parameter object is a JAXB element for following cases:

It is an instance of javax.xml.bind.JAXBElement. The class of object is annotated with @XmlRootElement.

鉴于我的非根元素显然没有@XmlRootElement,有没有办法为它获取qname/namespace?

或者,有没有一种方法可以通过编程确定哪个 class 代表包中的根元素(而不必自己扫描所有 classes 来获取注释)?我在 package-info.java 文件中看到了名称空间,但不确定如何获取它。

我把问题留在这里以防其他人遇到同样的问题。

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

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