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

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebService调用可以通过以下步骤进行: 1. 首先,确保已经将类标记为@WebService注解,以指定将该类发布为一个WebService服务。 2. 然后,在WebService的URL后面加上?wsdl的方式来调用WebService服务,比如http://ws.webxml.com.***需要指定一些属性: - serviceName:指定对外发布的服务名,即WebService的服务名称。 - endpointInterface:指定服务接口的全路径,即SEI(Service EndPoint Interface)服务端点接口。 - name:指定XML Web Service的名称,可以是实现XML Web Service的类的名称或wsdl:portType的名称。 - portName:指定wsdl:portName,默认为WebService.name Port。 - targetNamespace:指定所需的命名空间,通常使用接口实现类的包名的反射。 - wsdlLocation:指定用于定义WebService的WSDL文档的Web地址。这个地址可以是相对路径或绝对路径。 注意:实现类上可以不添加@WebService注解。 通过以上步骤,您就可以成功调用WebService服务了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [webservice的几种调用方式](https://blog.csdn.net/RuiKe1400360107/article/details/83063644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值