gpt4 book ai didi

web-services - 具有单个数组元素的复杂类型引发编码异常

转载 作者:行者123 更新时间:2023-12-01 05:37:35 24 4
gpt4 key购买 nike

我们有 JAX-RPC 风格的 Web 服务,其复杂类型定义如下:

<xs:complexType name = "SomeFault">
<xs:sequence>
<xs:element name = "errorMessages" type="some:ErrorMessageWSType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:simpleType name = "ErrorMessageWSType">
<xs:restriction base = "xs:NMTOKEN">
<xs:enumeration value = "INVALID_1"/>
<xs:enumeration value = "INVALID_2"/>
<xs:enumeration value = "INVALID_3"/>
</xs:restriction>
</xs:simpleType>

当响应/故障复杂类型具有单个数组类型字段时,我们在服务器端遇到编码(marshal)处理异常。

weblogic.wsee.codec.CodecException: Failed to encode com.bea.xml.XmlException: failed to find a suitable binding type for use in marshalling object "[Lnamespace.type.ErrorMessageWSType;@693767e9". using schema type: t=SomeFault@http://namespace/SOME/v1 java type:namespace.type.ErrorMessageWSType[]



如果我们更改 SomeFault,通过向复杂类型添加另一个元素,错误就会消失。
<xs:complexType name = "SomeFault">
<xs:sequence>
<xs:element name = "errorMessages" type="some:ErrorMessageWSType" maxOccurs="unbounded" />
<xs:element name = "dummyString" type="xsd:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>

我们在 wsdlc 代码生成过程中做错了什么还是这是一个已知问题?

类似的问题已经发布在 https://forums.oracle.com/forums/thread.jspa?messageID=4462906 ,但没有任何回应,任何指针都会很棒。

谢谢。

最佳答案

不知道这是否解决了问题的“为什么”部分,但您可以尝试重写序列部分,例如:

<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="errorMessages" type="some:ErrorMessageWSType"/>
</xs:sequence>

OTOH,让第二种情况起作用而不是第一种情况的机制可能是什么?
可能是编码器然后必须弄清楚什么 xsd:string意味着在检查什么之前 some:ErrorMessageWSType意味着,然后必须唤醒解析器什么的?
这个思路引出了我会尝试的第二种方法,即声明 ErrorMessageWSType之前 SomeFault (也许在另一个命名空间中,只是为了看看是否可以解决任何问题)。

只是我的(累)两美分,我猜这两种方法都假定编码器中存在某种错误,因为我真的看不出您的示例代码中的任何内容不符合 XML 模式定义。

关于web-services - 具有单个数组元素的复杂类型引发编码异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7802649/

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