CXF服务调用因意外命名空间上的解组错误而失败

时间:2016-03-22 11:05:25

标签: java web-services wsdl cxf

我突然遇到了CXF(2.7.18)的问题。我在Tomcat 8.0.28和JDK 1.8.0_66下运行。

问题是,最近我们开始发现不接受带有适当标头的服务调用的问题。问题在于它适用于某些系统而不适用于其他系统。

失败的原因如下:

onLocationChanged

请注意,意外元素是正确的命名空间元素。 “预期”元素不正确 - 管道中的CXF或其他内容将名称空间URI重新映射为“https”

有什么可能导致这种情况以及如何纠正它的线索?

1 个答案:

答案 0 :(得分:0)

我能够确定问题所在。这是我们之前测试中从未出现的奇怪现象。

以下是总结。使用此WSDL的应用程序从定义生成绑定并将其放在包'com.foo'中。

该应用程序还依赖于另一个WSDL端点,但该模块是单独构建的,但具有冲突的包名称“com.foo”。

在我们之前的测试中,这从未出现过。

在某些时候,迁移到Java 8& Tomcat 8,这个问题在某些盒子上间歇性地浮出水面而不是其他盒子。关于我们正在使用的VM映像的某些内容会影响加载顺序。这并不是说我们依赖于加载顺序,但我们从未见过碰撞。

外部库和应用程序库都有一个package-info.java,它对XmlSchema注释具有冲突的命名空间定义。在Java 8 / Tomcat 8下的某个点上,加载顺序“已更改”,从而使冲突明显。加载的第一个package-info被缓存,导致错误。

解决方案是改变应用程序生成的WSDL绑定代码,将其放在另一个包中,避免冲突。