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();
有没有办法使用 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();