首页 > 解决方案 > WS 响应中没有元素内容。上层元素中只有一个 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

问题描述

我将 Java 和 Spring-ws 用于 Web 服务。我使用合同优先的方法。所以我生成了 Jaxb Java 类。

在 ws 服务响应的 xsd 定义中,我对元素“风险”有这个定义

<xs:complexType name="Risk">
  <xs:complexContent>
     <xs:extension base="ns26311:Risk">
        <xs:sequence>
          <xs:group ref="ns26311:RiskData"/>
        </xs:sequence>
     </xs:extension>
  </xs:complexContent>
</xs:complexType>

“ns26311:Risk”以这种方式在不同的 XSD 中定义

<xs:complexType name="Risk" abstract="true">
    <xs:sequence/>
</xs:complexType>

“ns26311:RiskData”是这样定义的(在这个不同的 XSD 中)

<xs:group name="RiskData">
    <xs:sequence>
      <xs:element name="reRisk" type="ns29421:riskByEval" minOccurs="1"    maxOccurs="1"/>
    </xs:sequence>
</xs:group>

“ns29421:riskByEval”以这种方式在不同的 XSD 中定义

<xs:simpleType name="riskByEval">
    <xs:restriction base="xs:string">
      <xs:maxLength value="10"/>
      <xs:minLength value="1"/>
    </xs:restriction>
</xs:simpleType>

在元素“reRisk”的 Web 服务 XML 响应中,有这段代码

<ns3:risk xsi:type="ns6:Risk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

并且元素“风险”中没有元素内容。

元素“风险”的片段内容应如下所示:

<ns2:risk>
  <ns13:reRisk>some value</ns13:reRisk>
</ns2:risk>

在 Java Jaxb 对象(表示响应)中,reRisk 字段中有一个值。

有谁知道为什么没有元素 reRisk 填写在响应中(这是奇怪的 xsi:type="ns6:Risk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 片段XML 响应中的代码)?

非常感谢您的建议。

标签: xmljaxbspring-ws

解决方案


问题出在不同的地方。

当我通过 myBatis 设置整个 Java 响应对象的 Risk 属性时,我为该属性设置了不同类型的对象(来自不同的包)。

这就是为什么我在 XML 中得到奇怪的响应 :-)


推荐阅读