7

连接到我的 Web 服务时出现错误:

javax.xml.ws.soap.SOAPFaultException:解组错误:意外元素(uri:“”,本地:“OrderID”)。预期元素是 <{}Login>、<{}CrewId>、<{}OrderID >、<{}OrderNumber >

org.apache.cxf.transport.servlet.CXFServlet使用和jaxws:endpoint注释公开服务。客户端是使用 CXF 生成的。首先,令我惊讶的是,我在两端都使用了相同的技术并且解决方案不起作用,其次,错误消息中出现了这个神秘的 {}。

那么,有什么问题以及如何理解这个 {}?

4

5 回答 5

20

你注意到 OrderID 和 '>' 之间的空格了吗?预期是 <{}OrderID > 并且您发送 >“OrderID”。检查元素名称中是否没有空格。

虽然 Stepan Vihor 的上述回答帮助您获得了所需的内容,但让我回答您关于“{}”含义的问题:

这意味着 JAX-B Unmarshaller 期望您的 OrderID 元素没有命名空间,即该元素的命名空间 uri 需要等于“”。

有关XML 命名空间的简要介绍,请参见此处

于 2012-08-21T17:57:44.830 回答
13

你注意到OrderID和'>'之间的空格了吗?预期是<{}OrderID >和你发送"OrderID"。检查元素名称中是否没有空格。

于 2012-05-15T13:03:55.410 回答
3

@icyitscold,我想根据我的经验添加的评论是,您可以将 elementFormDefault 更改为“合格”,如 elementFormDefault="qualified" element xs:schema. 默认情况下,命名空间将被限定。

这是 WSDL-first 方法,如果您使用 code-first 方法,您可以考虑将更改添加为

@javax.xml.bind.annotation.XmlSchema( attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

于 2014-08-15T20:14:25.483 回答
3

我得到了同样的错误,

javax.xml.ws.soap.SOAPFaultException:解组错误:意外元素(uri:“”,本地:“国家”)。预期元素为 <{}seconds>、<{}month>、<{}hour>、<{}year>、<{}minutes>、<{}day>

然后我在 Web 服务端发现响应类型添加了一个新属性“国家”。

要忽略新添加的属性,请在“jaxws:client”设置中添加以下属性。

<jaxws:client id="abc"
              serviceClass="someClass"
              address="url">
    <jaxws:properties>
        <entry key="schema-validation-enabled" value="false"/>
        <entry key="set-jaxb-validation-event-handler" value="false"/>
    </jaxws:properties>
</jaxws:client>
于 2018-01-25T03:09:38.150 回答
-2

有时您必须指定 wsdl 中使用的名称(区分大小写):<{Log}>、<{} CrewId>、<{} OrderID>、<{} OrderNumber>

@XmlElement(name = "CrewId")
protected String crewId;
@XmlElement(name = "OrderID ")
protected String orderID;
@XmlElement(name = "Login")
protected String login;
@XmlElement(name = "OrderNumber")
protected String orderNumber;
于 2013-09-21T11:05:30.007 回答