JAX-WS是否仅支持<any namespace =“ ## other” />?

时间:2019-06-21 09:08:20

标签: xsd cxf jax-ws xsd-validation wsdl2java

我正在尝试向工作中调用Web服务的Java应用程序添加一些向前兼容性,但是我遇到了JAX-WS的一些问题...

该应用程序使用wsdl2java Maven插件从WSDL生成CXF Web服务客户端。然后,它将使用生成的客户端(通过JMS上的SOAP)与Web服务进行通信。 (可能值得注意的是,尽管我不确定,wsdlLocation的{​​{1}}属性由于某些原因未填写,也许是因为WSDL本身是由Tibco Web Service和因此,缺少了一些要按原样使用的数据,例如Web服务的位置,这些数据是在<jaxws:client/>的{​​{1}}元素中完成的...)

由于JAXB在XML方面非常宽松(请参阅my previous question),因此我决定启用模式验证(<jaxws:client/>),该方法效果很好,并且为了提高向前兼容性,我使用了{{1 }}属性和application-context.xml元素,如下所示:

<jaxws:client><jaxws:properties><entry key="schema-validation-enabled" value="true"/></jaxws:properties></jaxws:client>

因此,当Web服务在类型的末尾添加元素时,应用程序应将其放在“ any”数组中,并忽略它。

请注意,nillable元素未提及其<any/>属性,默认为<complexType> <sequence> <element nillable="true"/> <element nillable="true"> <complexType> <sequence> <element nillable="true" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> </element> <any processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType>

但是,当我尝试运行该应用程序时,出现以下错误:
<any/>
因此,似乎尽管没有namespace,但JAX-WS还是使用##any而不是Unmarshalling Error: cvc-complex-type.2.4.a : Invalid content was found starting with element 'ns0:SomeNewElement'. One of '{WC[##other:\"http://some/namespace\"]}' is expected.
我还尝试了其他命名空间,例如namespacenamespace="##other"namespace="##any",它们的结果完全相同。

为什么JAX-WS会忽略##targetNamespace的{​​{1}},以及如何充分利用##any元素呢?

0 个答案:

没有答案