这几天在公司的项目中,需要调用第三方短信平台的webservice接口群发短信。走了许多弯路,最终解决了问题,并记下实践的一些经验。
在前一个项目中,为外界提供了一些webservice接口,使用的是apache-CXF,这个组件用的挺多的,但限制也是有的,例如它不能调用axis2 RPC模式的接口(网上的说法)。
在之前用它发布服务,和调用传递字符串入参等,都是很方便、简单。挺好用。但是最近调用短信平台接口出现的一些问题,还是感悟很深刻。
服务接口是用axis2发布的,需要调用的方法入参和返回参数都是pojo。
按照一贯的流程,使用wsdl2java工具生成代码,使用jax-ws proxy模式调用生成代理接口,封装好入参pojo参数,执行报异常。
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.cxf.databinding.AbstractWrapperHelper.createWrapperObject(AbstractWrapperHelper.java:99)
at org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:105)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)
at cn.intellisoft.hoorayos.webservice.client.DynamicClient.executeOperation(DynamicClient.java:39)