当前位置: 首页 > 知识库问答 >
问题:

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

鞠嘉誉
2023-03-14

是否有一种使用JAXB从非根元素以编程方式获取名称空间的方法?

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

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

但是,如果我尝试使用来自同一个包的类型,但不是根元素,qname为null。

根据JAXBIntrospector的javadocs:

参数对象是以下情况的JAXB元素:

它是javax.xml.bind.JAXBElement的实例,object的类用@XmlRootElement注释。

鉴于我的非根元素显然没有@XmlRootElement,有没有办法获取它的qname/命名空间?

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

共有1个答案

上官鸿祯
2023-03-14

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

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

    String namespace = XmlElementName.class.getPackage().getAnnotation(XmlSchema.class).namespace();
 类似资料:
  • 我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm

  • 我正在尝试使用jaxb创建XML,如下所示,其中子元素有单独的命名空间。 我的班级 但我正在像下面这样生成xml,其中子模式位于根级别。 我在package-info.java定义了@xmlschema 当我生成xml时,子元素的名称空间没有被生成,我只得到根元素的命名空间。

  • 我想让JAXB列表到xml,其中命名空间只出现在根元素中,而不是在任何其他元素中: 我已经尝试了package level @XmlSchema,但是我一定是做错了什么,因为没有显示任何东西。 这是我的根元素类: 我还有以下包-info.java:

  • 问题内容: 考虑以下功能: 而这个HTML部分: 显示警报框,但显示“未定义”。 问题答案: 您看到该错误的原因是因为返回了一个元素。并且a 元素没有属性。 使用此代替:

  • 我正在写一个实用程序之间的集成内部系统和第三方产品。我试图生成一个可以由第三方产品加载的xml文件,但我很难按照他们的要求生成xml。我已经创建了一个简化的版本,只是为了测试。 预期产出应如下: 我的代码如下: 主要: 课程类别:

  • 仅当我从 XML 文件内的所有元素中删除“bpmn:”时,此代码才有效,否则它会引发以下异常: javax.xml.bind.UnmarshalException:意外元素(URI:"http://www.omg.org/spec/BPMN/20100524/MODEL",local:"定义") 我试图在不修改XML文件的情况下使其工作。任何帮助将不胜感激。提前致谢 :)