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

JAXB解组无法返回具有替换组的元素

贺福
2023-03-14

在解组xml文档时,JAXB无法解组具有替换组名称的复杂类型。doucment带有替换名,JAXB解组进程无法将数据与实际元素绑定。最后,我得到一个空对象,它的数据到达xml文档中。这是JAXB中的错误还是我在这里做错了什么?

注意:下面的模式清楚地定义了有问题的复杂元素类型ENBFunction的替代名称。并且在解编组"xn: ManagedElementOptionallyContainedNrmClass"时没有错误,但是在类"ENBFunction"中没有填充Java数据。

    <element name="ENBFunction" substitutionGroup="xn:ManagedElementOptionallyContainedNrmClass">
    <complexType>
      <complexContent>
        <extension base="xn:NrmClass">
          <sequence>
            <element name="attributes" minOccurs="0">
              <complexType>
                <all>
                  <element name="userLabel" type="string"/>
                  <element name="enbId" type="en:EnbId" minOccurs="0"/>
                  <element name="x2BlackList" type="xn:dnList" minOccurs="0"/>
                  <element name="x2WhiteList" type="xn:dnList" minOccurs="0"/>
                  <element name="x2HOBlackList" type="xn:dnList" minOccurs="0"/>
                  <element name="x2IpAddressList" type="string" minOccurs="0"/>
                  <element name="tceIDMappingInfoList" type="en:TceIDMappingInfoList" minOccurs="0"/>
                  <!-- linkList attribute is to be added when defined in the IS -->
                </all>
              </complexType>
            </element>
            <choice minOccurs="0" maxOccurs="unbounded">
              <element ref="en:EUtranCellFDD"/>
              <element ref="en:EUtranCellTDD"/>
              <element ref="epc:EP_RP_EPS"/>
              <element ref="en:ENBFunctionOptionallyContainedNrmClass"/>
              <element ref="en:DeNBCapability"/>
              <element ref="xn:VsDataContainer"/>
            </choice>
            <choice minOccurs="0" maxOccurs="1">
              <element ref="sp:ESPolicies"/>
            </choice>
            <choice minOccurs="0" maxOccurs="1">
              <element ref="sp:SONControl"/>
            </choice>
            <choice minOccurs="0" maxOccurs="1">
              <element ref="sp:SONTargets"/>
            </choice>
          </sequence>
        </extension>
      </complexContent>
    </complexType>
  </element>

共有1个答案

傅博瀚
2023-03-14

主要问题是我创建JAXBContext实例的方式。JAXB为创建JAXBContext实例提供了多种方法:

static JAXBContext  newInstance(Class... classesToBeBound) 
       Obtain a new instance of a JAXBContext class.
static JAXBContext  newInstance(Class[] classesToBeBound, Map<String,?> properties) 
       Obtain a new instance of a JAXBContext class.
***static JAXBContext   newInstance(String contextPath) 
       Obtain a new instance of a JAXBContext class.***
static JAXBContext  newInstance(String contextPath, ClassLoader classLoader) 
       Obtain a new instance of a JAXBContext class.
static JAXBContext  newInstance(String contextPath, ClassLoader classLoader, Map<String,?> properties) 
       Obtain a new instance of a JAXBContext class.

最初我用的是第一个,

static JAXBContext  newInstance(Class... classesToBeBound) 

其中我提供了所有要绑定的jaxb类,但不知何故不起作用。当我使用第三种方法创建对象时,它起作用了,这种方法使用一个字符串,该字符串具有冒号分隔的包名称,所有jaxb类都驻留在该字符串中。

static JAXBContext   newInstance(String contextPath)
 类似资料:
  • 当在testng单元testcase中运行时,JAXB将XML文件解组到对象中工作正常。 当相同的代码被用来在另一个进程中解封相同的XML文件时,我得到了一个空对象。我可以验证对象是为XML文档中的每个元素创建的,并且所有适配器都被调用。在unmarshaller中设置事件处理程序,但没有验证问题。当我设置xmlns属性和前缀时,即使返回空对象,行为也略有不同。 我看了好几篇文章,但都无法与我面临

  • 我想解封一个包含混合内容的XML文件。我在stackoverflow上发现了一个似乎合适的线程(JAXB-@XmlMixed用于读取@XmlValue和@XmlElement),其中用户bdoughan定义了3个用例来处理混合内容。 第三个用例将标签之间的文本保存在单个 String 变量中,并将元素保存在 List 中。这就是我想要的。不幸的是,我无法让它工作,线程很旧,也许已经过时了。 我已经

  • 有太多关于大致相同主题的问题,但我找不到我想要的。如果我错过了,我很抱歉。 我正在尝试散集具有公共逻辑元素但使用不同标记定义的XML文件: 两个<代码> 我可以这样做: 所需要的只是在和中实现并分别返回或。 然而,在中有一个属性并以某种方式告诉JAXB将这两个字段映射到它似乎更简单。 我是不是想多了?你将如何实现它? (当然,我无法控制输入XML。如果可能的话,我还想避免使用MOXy的解决方案,因

  • 我有下面的xml结构: 有不同的 Field(X) 包装器元素,它们包含相同的用户元素。XML 中可以发送 n 个字段。因此,我不能为每个单独的Jaxb。我需要访问用户,但在取消编组步骤后忽略 Field 元素。不幸的是,我无权更改xml结构。我无法找到解决方案。任何指针都会有所帮助。

  • 背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析

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