Junky's IT Notebook

          統(tǒng)計(jì)

          留言簿(8)

          積分與排名

          WebSphere Studio

          閱讀排行榜

          評(píng)論排行榜

          spring+JAX-RPC(Axis) 構(gòu)建webservice

          介紹

          關(guān)于用eclipse+wtp發(fā)布webservice是相當(dāng)?shù)暮?jiǎn)單。這里只簡(jiǎn)單介紹一下,wtp下發(fā)布webservice有以下幾個(gè)步驟:

          ·創(chuàng)建Dynamic Web Project.(wtp自帶項(xiàng)目)

          ·在soure folder 下面創(chuàng)建要發(fā)布的java bean。本例中發(fā)布了一個(gè)User.java

          ·在創(chuàng)建的工程上面新建Web Service. (wtp自帶) 瀏覽中選擇創(chuàng)建的User.java

          ·點(diǎn)擊完成后,運(yùn)行該工程,選擇在服務(wù)器上運(yùn)行,配置好服務(wù)器,本例發(fā)布用的Tomcat5.

          發(fā)布完成,相當(dāng)簡(jiǎn)單吧。

           

          接下來(lái)講webservice發(fā)布完成后,用springIOC對(duì)webservice進(jìn)行管理。Spring使用JAX-RPC端口代理來(lái)暴露RMI或者非RMI的接口。

          RMI接口:

          好處:客戶端不需要了解JAX-RPC

          壞處:客戶端需要對(duì)RMI對(duì)象有所了解。并且需要處理煩人的RemoteException.

          RMI接口:

          好處:客戶端對(duì)RMIJAX-RPC都不需要了解,完全解耦。

          壞處:水平有限,沒(méi)有發(fā)現(xiàn)。

           

          這里只講解非RMI接口的實(shí)現(xiàn)情況:

           

           

          『一』. 發(fā)布結(jié)果的回顧:

          上面的webservice已經(jīng)發(fā)布好了。這里列出被發(fā)布的User.java

          User.java:

          package org.upyaya.webservice;

          public class User ...{

              
          public String getAddress() ...{
                  
          return "Jingke Road,Zhangjiang,Shanghai";
              }


              
          public String getUserName() ...{
                  
          return "Upyaya";
              }

          }

          發(fā)布完成后我們可以得到一個(gè)wsdl的URL。本例中是:

          http://localhost:8080/SpringWebService/wsdl/User.wsdl

          『二』. 解析WSDL

          在eclipse+wtp的環(huán)境中解析wsdl也是很容易的。

          ·新建工程:使用Dynamic Web Project 取名:SpringWebServiceClient。
          ·在工程SpringWebServiceClient右鍵選擇新建Web Service Client。
          ·輸入上面的wsdl URL.
          ·解析出需要的java文件。

          如下圖:

          『三』. 創(chuàng)建DAO layer 和 Service layer

          DAO Layer:

          IUserDAO.java

          package org.upyaya.webservice.dao;

          public interface IUserDAO ...
          {
              
          public
           String getAddress();

              
          public
           String getUserName();
          }

          UserDAOImpl.java

          package org.upyaya.webservice.dao;

          public class UserDAOImpl implements IUserDAO ...
          {
              
          private
           IUserDAO userDAO;

              
          public IUserDAO getUserDAO() ...
          {
                  
          return
           userDAO;
              }


              
          public void setUserDAO(IUserDAO userDAO) ...{
                  
          this.userDAO =
           userDAO;
              }


              
          public String getAddress() ...{
                  
          return
           userDAO.getAddress();
              }


              
          public String getUserName() ...{
                  
          return
           userDAO.getUserName();
              }


          }

          Service Layer:

          IUserService.java

          package org.upyaya.webservice.service;

          public interface IUserService ...
          {
              
          public
           String getAddress();

              
          public
           String getUserName();
              
              
          public
           String getUserInfo();
          }

          UserServiceImpl.java

          package org.upyaya.webservice.service;

          import
           org.upyaya.webservice.dao.IUserDAO;

          public class UserServiceImpl implements IUserService ...
          {

              
          private
           IUserDAO userDAO;

              
          public IUserDAO getUserDAO() ...
          {
                  
          return
           userDAO;
              }


              
          public void setUserDAO(IUserDAO userDAO) ...{
                  
          this.userDAO =
           userDAO;
              }


              
          public String getAddress() ...{
                  
          return
           userDAO.getAddress();
              }


              
          public String getUserInfo() ...{
                  
          return getUserName() + "@" +
           getAddress();
              }


              
          public String getUserName() ...{
                  
          return
           userDAO.getUserName();
              }


          }

          注意:看上面的幾個(gè)累,有沒(méi)有涉及到RMI和JAX-RPC?沒(méi)有吧。完全的解耦,dao 和service完全不知到他們的存在

          『四』. Spring AOP&IOC,解決webservice和DAO Layer之間的連接.

          先看配置文件(Spring的家常便飯):

          webservice.xml

           

          <?xml version="1.0" encoding="UTF-8"?> 
          <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" 
            "http://www.springframework.org/dtd/spring-beans.dtd"
          > 

          <beans>  
              
              
          <bean id="userDAO" class="org.upyaya.webservice.dao.UserDAOImpl">
                  
          <property name="userDAO">
                      
          <ref local="userServiceProxy"/>
                  
          </property>
              
          </bean>
              
              
          <bean id="userService" class="org.upyaya.webservice.service.UserServiceImpl">
                  
          <property name="userDAO" ref="userDAO" />
              
          </bean>

          <!--  Configure WebService bean-->

              
          <bean id="userServiceProxy" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
                             
          <!--  Configure WebService wsdl url-->
                     
          <property name="wsdlDocumentUrl">
                          
          <value>http://localhost:8080/SpringWebService/wsdl/User.wsdl</value>
                     
          </property>
                             
          <!--  Configure WebService namespace uri -->
                     
          <property name="namespaceUri">
                          
          <value>http://webservice.upyaya.org</value>
                     
          </property>
                             
          <!--  Configure WebService service name -->
                     
          <property name="serviceName">
                          
          <value>UserService</value>
                     
          </property>
                             
          <!--  Configure WebService portName -->
                     
          <property name="portName">
                          
          <value>User</value>
                     
          </property>
                             
          <!-- Configure WebService implements interface-->
                     
          <property name="serviceInterface">
                          
          <value>org.upyaya.webservice.dao.IUserDAO</value>
                     
          </property>
                     
          <property name="portInterface">
                             
          <value>org.upyaya.webservice.User</value>
                     
          </property>
              
          </bean>

          </beans>
           
          ·wsdlDocumentUrl,這個(gè)不用解釋了吧。
          ·namepaceUrl,wsdl服務(wù)的命名空間URL。
          ·servicename,wsdl的服務(wù)名稱。
          ·portName,服務(wù)端口。
          ·serviceInterface,webservice實(shí)現(xiàn)的接口。是我們指定的業(yè)務(wù)接口
          ·portInterface,RMI服務(wù)接口。

           『四』. 測(cè)試

          Client.java

          package org.upyaya.webservice.client;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;
          import org.upyaya.webservice.service.IUserService;

          public class UserClient ...{

              
          public static void main(String[] args) ...{
                   ApplicationContext context 
          = 
                          
          new FileSystemXmlApplicationContext(
                                  
          "webservice.xml");
                   IUserService service 
          = (IUserService)context.getBean("userService");
                   System.out.println(service.getUserInfo());
              }


          }

           

           
          這里為了方便沒(méi)有在web里面展現(xiàn)。但是展現(xiàn)機(jī)制不是這里的重點(diǎn)。所以選擇控制臺(tái)打印,結(jié)果如下:

          Output:

          log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
          log4j:WARN Please initialize the log4j system properly.
          Upyaya@Jingke Road,Zhangjiang,Shanghai

          附:Wsdl文件

          <?xml version="1.0" encoding="UTF-8"?>
          <wsdl:definitions targetNamespace="http://webservice.upyaya.org" xmlns:impl="http://webservice.upyaya.org" xmlns:intf="http://webservice.upyaya.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
          <!--WSDL created by Apache Axis version: 1.3
          Built on Oct 05, 2005 (05:23:37 EDT)
          -->
           
          <wsdl:types>
            
          <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://webservice.upyaya.org" elementFormDefault="qualified">
             
          <element name="getAddress">
              
          <complexType/>
             
          </element>
             
          <element name="getAddressResponse">
              
          <complexType>
               
          <sequence>
                
          <element name="getAddressReturn" type="xsd:string"/>
               
          </sequence>
              
          </complexType>
             
          </element>
             
          <element name="getUserName">
              
          <complexType/>
             
          </element>
             
          <element name="getUserNameResponse">
              
          <complexType>
               
          <sequence>
                
          <element name="getUserNameReturn" type="xsd:string"/>
               
          </sequence>
              
          </complexType>
             
          </element>
            
          </schema>
           
          </wsdl:types>

             
          <wsdl:message name="getUserNameResponse">

                
          <wsdl:part name="parameters" element="impl:getUserNameResponse"/>

             
          </wsdl:message>

             
          <wsdl:message name="getUserNameRequest">

                
          <wsdl:part name="parameters" element="impl:getUserName"/>

             
          </wsdl:message>

             
          <wsdl:message name="getAddressRequest">

                
          <wsdl:part name="parameters" element="impl:getAddress"/>

             
          </wsdl:message>

             
          <wsdl:message name="getAddressResponse">

                
          <wsdl:part name="parameters" element="impl:getAddressResponse"/>

             
          </wsdl:message>

             
          <wsdl:portType name="User">

                
          <wsdl:operation name="getAddress">

                   
          <wsdl:input name="getAddressRequest" message="impl:getAddressRequest"/>

                   
          <wsdl:output name="getAddressResponse" message="impl:getAddressResponse"/>

                
          </wsdl:operation>

                
          <wsdl:operation name="getUserName">

                   
          <wsdl:input name="getUserNameRequest" message="impl:getUserNameRequest"/>

                   
          <wsdl:output name="getUserNameResponse" message="impl:getUserNameResponse"/>

                
          </wsdl:operation>

             
          </wsdl:portType>

             
          <wsdl:binding name="UserSoapBinding" type="impl:User">

                
          <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

                
          <wsdl:operation name="getAddress">

                   
          <wsdlsoap:operation soapAction=""/>

                   
          <wsdl:input name="getAddressRequest">

                      
          <wsdlsoap:body use="literal"/>

                   
          </wsdl:input>

                   
          <wsdl:output name="getAddressResponse">

                      
          <wsdlsoap:body use="literal"/>

                   
          </wsdl:output>

                
          </wsdl:operation>

                
          <wsdl:operation name="getUserName">

                   
          <wsdlsoap:operation soapAction=""/>

                   
          <wsdl:input name="getUserNameRequest">

                      
          <wsdlsoap:body use="literal"/>

                   
          </wsdl:input>

                   
          <wsdl:output name="getUserNameResponse">

                      
          <wsdlsoap:body use="literal"/>

                   
          </wsdl:output>

                
          </wsdl:operation>

             
          </wsdl:binding>

             
          <wsdl:service name="UserService">

                
          <wsdl:port name="User" binding="impl:UserSoapBinding">

                   
          <wsdlsoap:address location="http://localhost:8080/SpringWebService/services/User"/>

                
          </wsdl:port>

             
          </wsdl:service>

          </wsdl:definitions>

           

          《完》

          posted on 2007-07-06 15:07 junky 閱讀(1967) 評(píng)論(0)  編輯  收藏 所屬分類: web

          主站蜘蛛池模板: 梅河口市| 哈尔滨市| 樟树市| 报价| 衡水市| 察隅县| 栖霞市| 眉山市| 冷水江市| 韩城市| 河东区| 乃东县| 富顺县| 台前县| 广丰县| 南和县| 绥德县| 巨野县| 介休市| 桑日县| 定襄县| 安远县| 贡山| 通山县| 轮台县| 汶上县| 桐梓县| 南投县| 东台市| 墨竹工卡县| 宁明县| 凉城县| 清河县| 临海市| 宁波市| 颍上县| 麦盖提县| 大埔区| 会泽县| 贺州市| 玉山县|