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

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

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

    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)單吧。

     

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

    RMI接口:

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

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

    RMI接口:

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

    壞處:水平有限,沒有發(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è)累,有沒有涉及到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,這個(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());
        }


    }

     

     
    這里為了方便沒有在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

    主站蜘蛛池模板: 日韩一级片免费观看| 美女被爆羞羞网站在免费观看| 亚洲中文无码线在线观看| 亚洲中文字幕无码av| 精品国产亚洲第一区二区三区| 免费福利在线观看| 中文字幕视频在线免费观看| 亚洲免费二区三区| 国产最新凸凹视频免费| 在线亚洲97se亚洲综合在线| 亚洲国产高清视频| 亚洲精品久久无码| a毛片全部免费播放| 波多野结衣中文字幕免费视频| 国产精品色午夜视频免费看| 2048亚洲精品国产| 在线免费观看亚洲| 色欲色欲天天天www亚洲伊| 在线观看人成视频免费无遮挡| 国产人成免费视频网站| 四虎影在线永久免费四虎地址8848aa | 久久亚洲国产成人影院| 日韩少妇内射免费播放| 曰批全过程免费视频播放网站| 国产麻豆免费观看91| 亚洲成a人片在线观看无码专区| 亚洲国产精品综合久久2007 | 亚洲性色高清完整版在线观看| 在线观看亚洲精品专区| 久久免费观看国产精品| 女性自慰aⅴ片高清免费| 亚洲人成人77777网站| 亚洲色偷偷综合亚洲av78| 中国一级特黄的片子免费| 免费无码AV片在线观看软件| 亚洲人色婷婷成人网站在线观看| 亚洲一区二区三区高清不卡 | 久久国产成人精品国产成人亚洲| 亚洲五月综合缴情婷婷| a级在线免费观看| 免费国产成人午夜电影|