一、使用jaxws
配置方法如下:
<bean id="tradeService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"> <property name="serviceInterface" value="com.webservice.test.trade.TradeService" /> <property name="namespaceUri" value="http://trade.test.webservice.com/" /> <property name="wsdlDocumentUrl" value="http://127.0.0.1:8080/webservice/tradeService?wsdl" /> <property name="serviceName" value="tradeService" /> <property name="portName" value="tradeServiceImplPort" /> </bean>
若只知道访问路径(wsdlDocumentUrl),不确定其他参数时,可先确保访问路径正确,其他参数(namespaceUri、serviceName、portName)根据错误提示进行逐一修改即可。
TradeService代码:
package com.webservice.test.trade; import javax.jws.WebService; @WebService public interface TradeService { String callServiceXml(@WebParam(name="xml")String xml); }
注意:
a.对于接口类和相关类的包路径,一定要和服务器的一样,否则会出现
Unexpected wrapper element {****}tradeService found.……错误。
其实namespaceUri参数就是服务器包的路径
http://trade.test.webservice.com/对应服务器上的路径就是com.webservice.test.trade
b.接口参数上必须打上@WebParam(name="xml"),否则会出现:
JaxWsSoapFaultException: Unmarshalling Error: unexpected element (uri:"", local:"arg0")错误。
c.若都是Java工程间的通信,为避免一些不必要的情况出现,可以让服务端将接口进行打包,发送给客户端调用方,保证路径一致等问题。
二、使用spring ws的WebServiceTemplate
配置的方法如下:
<bean id="xxxWebService" class="org.springframework.ws.client.core.WebServiceTemplate"> <property name="defaultUri" value="http://XXX.net:8080"/> </bean>
三、使用CXF
配置方法如下:
<import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:client id="xxxWebService" serviceClass="com.xxx.UploadFileService" address="http://XXX.net:8080"> </jaxws:client>
四、使用xfire
配置方法如下:
<bean id ="dwdsspWebService" class ="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean"> <property name ="serviceClass"> <value>com.xxx.UploadFileService</value> </property> <property name ="wsdlDocumentUrl"> <value>http://XXX.net:8080/XXXServicePort?WSDL</value> </property> </bean>
在当前项目中主要是java工程间的通信,之前一直用Spring RMI和Spring集成hessian,比较习惯公共jar包的方式,所以我就只尝试了第一种客户端调用服务端的方式。
参考地址如下:
http://blog.csdn.net/kkdelta/article/details/7290769
http://blog.csdn.net/fu9958/article/details/5959262
http://blog.csdn.net/kkdelta/article/details/3987591
http://blog.csdn.net/jadyer/article/details/9002984
http://blog.csdn.net/vickychen89/article/details/6606571
http://coach.iteye.com/blog/894159
http://my.oschina.net/zimingforever/blog/212492