我突然遇到了CXF(2.7.18)的问题。我在Tomcat 8.0.28和JDK 1.8.0_66下运行。
问题是,最近我们开始发现不接受带有适当标头的服务调用的问题。问题在于它适用于某些系统而不适用于其他系统。
失败的原因如下:
onLocationChanged
请注意,意外元素是正确的命名空间元素。 “预期”元素不正确 - 管道中的CXF或其他内容将名称空间URI重新映射为“https”
有什么可能导致这种情况以及如何纠正它的线索?
答案 0 :(得分:0)
我能够确定问题所在。这是我们之前测试中从未出现的奇怪现象。
以下是总结。使用此WSDL的应用程序从定义生成绑定并将其放在包'com.foo'中。
该应用程序还依赖于另一个WSDL端点,但该模块是单独构建的,但具有冲突的包名称“com.foo”。
在我们之前的测试中,这从未出现过。
在某些时候,迁移到Java 8& Tomcat 8,这个问题在某些盒子上间歇性地浮出水面而不是其他盒子。关于我们正在使用的VM映像的某些内容会影响加载顺序。这并不是说我们依赖于加载顺序,但我们从未见过碰撞。
外部库和应用程序库都有一个package-info.java,它对XmlSchema注释具有冲突的命名空间定义。在Java 8 / Tomcat 8下的某个点上,加载顺序“已更改”,从而使冲突明显。加载的第一个package-info被缓存,导致错误。
解决方案是改变应用程序生成的WSDL绑定代码,将其放在另一个包中,避免冲突。