Web services 具有单个数组元素的复杂类型引发封送处理异常

Web services 具有单个数组元素的复杂类型引发封送处理异常,web-services,wsdl,weblogic,weblogic-10.x,jax-rpc,Web Services,Wsdl,Weblogic,Weblogic 10.x,Jax Rpc,我们有JAX-RPC样式的web服务,其复杂类型定义如下: <xs:complexType name = "SomeFault"> <xs:sequence> <xs:element name = "errorMessages" type="some:ErrorMessageWSType" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> &

我们有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>

当response/fault复杂类型有一个数组类型字段时,我们在服务器端遇到封送异常

weblogic.wsee.codec.codeception:编码失败 com.bea.xml.XmlException:未能为找到合适的绑定类型 用于编组对象 “[Lnamespace.type.ErrorMessageWSType;@693767e9”。使用架构类型: t=SomeFault@http://名称空间/SOME/v1 java 类型:namespace.type.ErrorMessageWSType[]

如果我们更改某个错误,通过向复杂类型添加另一个元素,错误就会消失

<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代码生成过程中出错,或者这是一个已知问题

类似的问题已经发布在了,但是没有任何回应,任何提示都是很好的


谢谢。

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

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

奥托,是什么机制让第二个案例起作用,而不是第一个? 可能是封送员在检查
some:ErrorMessageWSType
的意思之前必须先弄清楚xsd:string的意思,然后必须唤醒解析程序或其他什么? 这条思路引出了我将尝试的第二种方法,即在
SomeFault
之前声明
ErrorMessageWSType
(也许在另一个名称空间中,只是为了看看这是否修复了任何问题)


只是我的(累了)两美分,我猜这两种方法都假定marshaller中存在某种缺陷,因为我看不出示例代码中的任何内容与XML模式定义不符。

尝试了这两种方法,得到了相同的异常。无论如何,谢谢!您尝试过另一个限制库吗?来自XML模式定义n():“为了兼容性(请参阅术语(§1.4)),NMTOKEN应仅在属性上使用。”请尝试字符串,看看会发生什么。也尝试了该选项…运气不好…出现了相同的异常!