webservice调用错误 Unmarshalling Error: 意外的元素
webservice调用错误 Unmarshalling Error: 意外的元素
记录一次在webservice接口调用时的问题处理。
1.错误信息
在向服务端推送数据后,服务端输出信息,客户端接收时报错
Unmarshalling Error: 意外的元素 (uri:"http://mss.cmcc.com/SB_SC_PSS_ImportCGProjectReviewSrv", local:"ErrorItem")。所需元素为<{}ErrorItem>
2.问题分析
服务端返回数据信息包括:ErrorFlag(状态)、ErrorMessage(出错信息)、ErrorCollection(错误信息实体)、ResponseCollection(返回信息实体)。
错误信息中所提到的ErrorItem是ErrorCollection中的List数据集对象。
@WebMethod(action = "process") @WebResult(name = "Response", targetNamespace = "http://mss.cmcc.com/SInfoSrv", partName = "payload") public Response process( @WebParam(partName = "payload", name = "Request", targetNamespace = "http://mss.cmcc.com/InfoSrv") Request payload );
服务端处理方法中指定了传入参数和返回参数的targetNamespace。
public class Response{
@XmlElement(name = "ErrorFlag", required = true, nillable = true) protected String errorFlag; @XmlElement(name = "ErrorMessage", required = true, nillable = true) protected String errorMessage; @XmlElement(name = "INSTANCE_ID", required = true, nillable = true) protected BigDecimal instanceid; @XmlElement(name = "ErrorCollection", required = true) protected ErrorCollection errorCollection; @XmlElement(name = "ResponseCollection", required = true) protected ResponseCollection responseCollection;}
返回实体对象中并未指定ErrorCollection、ResponseCollection的namespace,未指定的情况下使用默认的namespace。
上图是在报错时侯的代码目录结构,由于每个模块下面都有共同的 ErrorCollection、ResponseCollection、ErrorItem、ResponseItem,因此放置在单独的一个目录下。解析返回的数据信息时,由于返回实体对象中并未指定ErrorCollection、ResponseCollection的namespace,在使用默认namespace时就报错。
3.问题解决
在将ErrorCollection、ResponseCollection、ErrorItem、ResponseItem放到各自的模块下之后,错误随即消失。
更多推荐
所有评论(0)