记录一次在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放到各自的模块下之后,错误随即消失。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐