答案 0 :(得分:9)
我知道这个问题是一年之久没有接受的答案,但今天我的错误完全相同。
与原始问题海报一样,我有一个带有返回对象的方法的Java-First服务。对我来说问题是我在服务方法返回的bean中添加了一个额外的属性。
一旦我重新发布/重新部署了服务,客户端jaxb为返回对象生成的类不再与服务器端WSDL复杂类型相同(即客户端类缺少新属性),所以我得到了带有缺失属性名称的“意外元素”异常。
使用WsdlToJava重新生成所有jaxb对象后,客户端代码正常工作。
我还遇到了针对这种情况的建议解决方法,您可能不希望每次在服务器端更改属性时都重新生成客户端代码。解决方案基本上是忽略客户端上的意外元素异常,因为它适用于现有代码不使用的新元素。链接到解决方案:
http://whileonefork.blogspot.com/2010/11/cxf-backwards-compatibility-adding.html
答案 1 :(得分:4)
传入的消息无效。基本上,它与架构不匹配。 (或者至少是JAXB所期望的)基本上,在消息中的某个位置,你有一个像以下元素:
<ns1:searchCriteria> ..... </ns1:searchCriteria>
或者可能没有名称空间前缀,但默认名称空间设置在某处。但是,JAXB期望该元素不合格。类似的东西:
<searchCriteria> ..... </searchCriteria>
绝对检查发送方以查看它们发送的内容以及检查模式以查看模式应该是什么样子。 (如果未指定,elementFormDefault = unqualified是默认值)
答案 2 :(得分:0)
我遇到了类似的问题,但原因是xsd架构中元素名称中的空格。
elemname__
。我刚刚将其更正为elemname
,现在可行了。抛出错误是因为xml的elemname
不是elemname__
。