<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    spring+JAX-RPC(Axis) 構建webservice

    介紹

    關于用eclipse+wtp發布webservice是相當的簡單。這里只簡單介紹一下,wtp下發布webservice有以下幾個步驟:

    ·創建Dynamic Web Project.(wtp自帶項目)

    ·在soure folder 下面創建要發布的java bean。本例中發布了一個User.java

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

    ·點擊完成后,運行該工程,選擇在服務器上運行,配置好服務器,本例發布用的Tomcat5.

    發布完成,相當簡單吧。

     

    接下來講webservice發布完成后,用springIOCwebservice進行管理。Spring使用JAX-RPC端口代理來暴露RMI或者非RMI的接口。

    RMI接口:

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

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

    RMI接口:

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

    壞處:水平有限,沒有發現。

     

    這里只講解非RMI接口的實現情況:

     

     

    『一』. 發布結果的回顧:

    上面的webservice已經發布好了。這里列出被發布的User.java

    User.java:

    package org.upyaya.webservice;

    public class User ...{

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


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

    }

    發布完成后我們可以得到一個wsdl的URL。本例中是:

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

    『二』. 解析WSDL

    在eclipse+wtp的環境中解析wsdl也是很容易的。

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

    如下圖:

    『三』. 創建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();
        }


    }

    注意:看上面的幾個累,有沒有涉及到RMI和JAX-RPC?沒有吧。完全的解耦,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,這個不用解釋了吧。
    ·namepaceUrl,wsdl服務的命名空間URL。
    ·servicename,wsdl的服務名稱。
    ·portName,服務端口。
    ·serviceInterface,webservice實現的接口。是我們指定的業務接口
    ·portInterface,RMI服務接口。

     『四』. 測試

    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());
        }


    }

     

     
    這里為了方便沒有在web里面展現。但是展現機制不是這里的重點。所以選擇控制臺打印,結果如下:

    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) 評論(0)  編輯  收藏 所屬分類: web

    主站蜘蛛池模板: 精品无码一区二区三区亚洲桃色| 免费人成黄页在线观看日本| 亚洲国产午夜福利在线播放| 中文字幕视频免费在线观看| 亚洲第一成年网站大全亚洲| 国产精品久免费的黄网站| 日本免费A级毛一片| 亚洲AV无码一区二区三区在线观看 | 国产精品九九久久免费视频 | 久久精品国产亚洲AV无码娇色 | 亚洲成亚洲乱码一二三四区软件| 桃子视频在线观看高清免费完整| 色网站在线免费观看| 国产在线a不卡免费视频| 免费污视频在线观看| 亚洲AV无码成人网站在线观看 | 国产乱妇高清无乱码免费| 亚洲制服在线观看| 亚洲国产精品一区二区三区久久| 四虎精品视频在线永久免费观看| 亚洲精品无码久久久久久久| 亚洲成人影院在线观看| 青青草a免费线观a| 日本人成在线视频免费播放| 久久精品国产亚洲av天美18| 亚洲美女视频网址| 亚洲国产三级在线观看| 国产成人AV片无码免费| 一级一看免费完整版毛片| 亚洲午夜在线播放| 亚洲美女aⅴ久久久91| 亚洲人成无码网WWW| 精品国产麻豆免费网站| 3344免费播放观看视频| 在线观看黄片免费入口不卡| 午夜亚洲WWW湿好爽| 亚洲综合一区国产精品| 亚洲免费网站在线观看| 久久青青草原亚洲AV无码麻豆| 狠狠色婷婷狠狠狠亚洲综合| 国产美女做a免费视频软件|