gpt4 book ai didi

java - 当 XSD 元素没有定义类型(类型 ur-type)但 SOAP 响应中返回子类型时,Axis2 会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:56 26 4
gpt4 key购买 nike

我在使用 Axis2 的 SOAP Web 服务客户端时遇到问题;扩展 WSDL 的 XSD 文件包含响应中元素的以下定义,请注意如何定义无类型:

<xs:element name="error" minOccurs="0"/>

以下是 SOAP 服务返回的实际响应:

<error>
<details>Unexpected Error Occurred</details>
</error>

这导致 Axis2 抛出以下异常:

org.apache.axis2.AxisFault: javax.xml.stream.XMLStreamException: element text content may not contain START_ELEMENT
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at fr.cel.service.HooStub.fromOM(HooStub.java:847

服务人员表示,由于“错误”元素没有类型定义,因此它可以包含所有内容,例如字符串、日期或附加结构。

我不太相信;那么,没有为元素定义类型意味着什么

此外,我们是否可以对 WSDL 或 Axi2 wsdl2java stub 生成命令进行任何更改,以便避免这种情况?知道而不是 <details>我们实际上可能会在响应中收到一些其他子类型。

更新:我正在使用 Axis2 1.5.4,而且 W3C XSD 规范似乎表明在这种情况下我们可以拥有子类型(当使用 ur-type 时,即未定义类型),那么为什么 Axis2 拒绝这样做?

最佳答案

您的服务人员是正确的。

根据 W3C XSD 建议,3.3.2 XML Representation of Element Declaration Schema Components :

{type definition} The type definition corresponding to the or element information item in the [children], if either is present, otherwise the type definition ·resolved· to by the ·actual value· of the type [attribute], otherwise the {type definition} of the element declaration ·resolved· to by the ·actual value· of the substitutionGroup [attribute], if present, otherwise the ·ur-type definition·.

点击 ur-type 的链接将产生没有指定的类型默认为anyType。

您当然可以通过提供需要 detail 元素的类型来收紧 error 的定义。这是否可以避免异常尚不清楚,因为仅考虑到 XSD 的约束,您应该能够在 error 中放置 details 元素。您的应用程序软件 (Axis2) 可能会施加 XSD 未指定的额外要求。

关于java - 当 XSD 元素没有定义类型(类型 ur-type)但 SOAP 响应中返回子类型时,Axis2 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com