Spring與axis結合調用 WebService

在這篇文章中http://xace.iteye.com/blog/687457 ,
我們使用XFire發佈了Web Service,現在我們使用axis作爲客戶端,調用這個服務

因爲Web服務是平臺無關的,每個WSDL文件即能描述服務的全部信息,我們首先借助axis的WSDL2Java工具,將WSDL文件轉化爲java類
java -cp lib\axis.jar;lib\commons-logging.jar;lib\commons-discovery.jar;lib\jaxrpc.jar;lib\saaj.jar;lib\wsdl4j.jar org.apache.axis.wsdl.WSDL2Java -v -W -o src -p demo.webservice.client http://localhost:8888/BookService?wsdl
pause

生成的代碼在/demo/webservice/client目錄中

我們觀察http://localhost:8888/BookService?wsdl地址的WSDL文件,其中關鍵部分:

<wsdl:definitions targetNamespace="http://server.webservice.demo">

<wsdl:service name="BookService">
<wsdl:port name="BookServiceHttpPort" binding="tns:BookServiceHttpBinding">
<wsdlsoap:address location="http://localhost:8888/BookService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>



  public static void main(String[] args) 
throws ServiceException, MalformedURLException, RemoteException {
// 客戶端調用代碼符合標準JAX-RPC接口,不會和具體底層框架綁定
String wsdl = "http://localhost:8888/BookService?wsdl";
String namespaceUri = "http://server.webservice.demo";
String serviceName = "BookService";
String portName = "BookServiceHttpPort";
QName serviceQN = new QName(namespaceUri, serviceName);
QName portQN = new QName(namespaceUri, portName);
ServiceFactory factory = ServiceFactory.newInstance();
Service srv = factory.createService(new URL(wsdl), serviceQN);
BookServicePortType service =
(BookServicePortType) srv.getPort(portQN, BookServicePortType.class);
SearchResponse search = service.search(new Search("j2ee"));
System.out.println(Arrays.toString(search.getOut()));

// 通過Spring JaxRpcPortProxyFactoryBean 取得
ApplicationContext context =
new ClassPathXmlApplicationContext("config.xml");
MyService springService = (MyService) context.getBean("bookService");
search = springService.search(new Search("j2ee"));
System.out.println(Arrays.toString(search.getOut()));
}



  <bean id="bookService"   
class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<!--
BookServicePortType遠程調用方法都將拋出RemoteException,可以自定義一個具有
相同方法簽名的接口,不拋出異常。這樣客戶端不知道自己調用的是Web服務,解耦
-->
<property name="serviceInterface" value="demo.webservice.client.MyService" />
<property name="portInterface"
value="demo.webservice.client.BookServicePortType" />
<property name="wsdlDocumentUrl"
value="http://localhost:8888/BookService?wsdl" />
<property name="namespaceUri" value="http://server.webservice.demo" />
<property name="serviceName" value="BookService" />
<property name="portName" value="BookServiceHttpPort" />
</bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章