隨筆-62  評論-29  文章-0  trackbacks-0

          一:web service 建立
          1:web.xml配置

          <?xml version="1.0" encoding="ISO-8859-1"?>
          <!-- START SNIPPET: webxml -->
          <!DOCTYPE web-app
              PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
              "http://java.sun.com/dtd/web-app_2_3.dtd">
             
          <web-app>

            <servlet>
              <servlet-name>XFireServlet</servlet-name>
              <display-name>XFire Servlet</display-name>
              <servlet-class>
                  org.codehaus.xfire.transport.http.XFireConfigurableServlet
              </servlet-class>
            </servlet>

            <servlet-mapping>
              <servlet-name>XFireServlet</servlet-name>
              <url-pattern>/servlet/XFireServlet/*</url-pattern>
            </servlet-mapping>

            <servlet-mapping>
              <servlet-name>XFireServlet</servlet-name>
              <url-pattern>/*</url-pattern>
            </servlet-mapping>
          </web-app>
          <!-- END SNIPPET: webxml -->
          2 :Web Service的接口類HelloWorld.java和對應實現類HelloWorldImpl.java

          package test;

          import java.util.List;

          public interface IHelloService {
           public String hw();
           
           public String sayHello(String ttt);

           public Course choose(User u);

           public List test(List t);
          }

          package test;

          import java.util.List;

          public interface IHelloService {
           public String hw();
           
           public String sayHello(String ttt);

           public Course choose(User u);

           public List test(List t);
          }

          3:web service.xml文件配置
          這個services.xml一定要放在META-INF/xfire/文件夾下面
          <?xml version="1.0" encoding="UTF-8"?>
           <beans xmlns="http://xfire.codehaus.org/config/1.0">
             <service>
                 <name>HelloService</name>
                  <namespace>http://test/HelloService</namespace>
                 <serviceClass>test.IHelloService</serviceClass>
                 <implementationClass>test.HelloServiceImpl</implementationClass>
             </service>
          </beans>
          二:webservice的訪問
          1:通過接口類訪問
          Service srvcModel = new
            * ObjectServiceFactory().create(IHelloService.class); XFireProxyFactory
            * factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
            *
            * String helloWorldURL = url_service+ "HelloService"; try { IHelloService
            * srvc = (IHelloService) factory.create(srvcModel,helloWorldURL);
            * System.out.println(srvc.sayHello("chenbo"));

          2 通過WSDL文件生成客戶端調用程序

          首先我們通過http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我們可以獲得WSDL文件HelloWorldService.wsdl,并將其放在src目錄下面,接著我們通過程序訪問該WSDL文件,并調用需測試的方法。此時測試類WebServiceClientTest.java的內容如下所示:

          import org.codehaus.xfire.client.Client;
          import org.springframework.core.io.ClassPathResource;
          import org.springframework.core.io.Resource;

          public class WebServiceClientTest
          {
             public static void main(String[] args) throws Exception {
                  WebServiceClientTest test = new WebServiceClientTest();
                  test.testClient();
               }
              
               public void testClient() throws Exception {
                  String wsdl = "HelloService.wsdl"; //對應的WSDL文件
                  Resource resource = new ClassPathResource(wsdl);
                  Client client = new Client(resource.getInputStream(), null); //根據WSDL創建客戶實例
                 
                  Object[] objArray = new Object[1];
                  objArray[0] = "阿蜜果";
                  //調用特定的Web Service方法
                  Object[] results = client.invoke("sayHello", objArray);
                  System.out.println("result: " + results[0]);
               }
          }


          3)根據服務地址創建客戶端調用程序

              接著讓我們來看一個根據服務地址創建客戶端調用程序的例子。我們可以通過測試類來測試Web Service的正確性,下面讓我們來看一個簡單的測試類,首先我們在src/test目錄建立WebServiceClientTest.java文件,并在src目錄下建立客戶端調用的Spring配置文件client.xml。在client.xml配置文件中我們定義了一個testWebServicebean,該bean訪問wsdlDocumentUrlhttp://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdlWSDL。該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="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
                 
          <property name="serviceClass">          
             
          <value>webservice.HelloWorld</value>       
                 
          </property>      
                  
          <property name="wsdlDocumentUrl">         
          <value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>       
                  
          </property>      
               
          </bean>
          </beans>

               在WebServiceClientTest.java文件中獲得HelloWorld,并調用它的sayHelloWorld方法來完成測試,該類的詳細內容如下所示:

          package test;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import webservice.HelloWorld;

          /**
           *HelloWorld的webservice的測試類.
           
          */

          publicclass WebServiceClientTest 

              HelloWorld helloWorld 
          = null;

              publicstaticvoid main(String[] args) 
          {
                 WebServiceClientTest test 
          = new WebServiceClientTest();
                 test.testClient();
              }
           

              publicvoid testClient() 
          {
                 ApplicationContext ctx 
          = new ClassPathXmlApplicationContext(
                        
          "client.xml");
                 helloWorld 
          = (HelloWorld) ctx.getBean("testWebService");
                 System.out.println(helloWorld.sayHelloWorld(
          "阿蜜果"));
              }

          }

          import java.net.MalformedURLException;
          import java.net.URL;

          import org.codehaus.xfire.client.Client;

          public class DynamicClientTest {
              public static void main(String[] args) throws MalformedURLException,
                      Exception {
                  Client client = new Client(new URL(
                          "http://127.0.0.1:8083/xxx/HelloService?wsdl"));
                  Object[] results = client
                          .invoke("sayHello", new Object[] { "chenbo test daynamic" });
                  System.out.println(results[0]);

              }
          }



          四.總結

              與Axis 相比,在實施Web Service時XFire更加簡潔高效,并且XFire對Spring提供了強大的支持,可以非常方便地在Spring中使用XFire實施Web Service,因此XFire在短短的時間里成為了受Web Service開發者喜愛的框架。

             XFire為客戶端提供了多種訪問Web Service的方式,如果可以獲取客戶端的窄接口類,則可以采用窄接口類調用Web Service。如果僅能獲取WSDL,XFire也可以采用動態反射的機制調用Web Service。XFire為Eclipse提供了一個可以根據WSDL生成客戶端存根代碼的插件,相信XFire也將為其它非Java語言提供類似的插 件。

          技術可用性的一個很大的標準是它是否方便測試,XFire提供多種方式進行Web Service的測試,簡單方便,給Web Service開發人員的測試工作帶來了福音。

          在 本文中,筆者通過一個簡單的helloWorld的Web Service例子,詳細地說明了用XFire+Spring構建Web Service時配置文件的相關配置,以及測試的各種方法,也讓讀者見識了XFire與Spring的無縫集成,希望對讀者學習XFire有點幫助。



          posted on 2008-09-11 16:37 閱讀(734) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 修水县| 长岭县| 太原市| 宁都县| 台山市| 长兴县| 大厂| 嘉禾县| 河北省| 小金县| 安塞县| 德令哈市| 新营市| 台安县| 潜江市| 德兴市| 泸定县| 孟州市| 沈丘县| 崇信县| 白河县| 浪卡子县| 东乌| 华容县| 临泉县| 台安县| 惠来县| 天台县| 宜兴市| 泸州市| 广昌县| 石嘴山市| 安乡县| 蓝田县| 莲花县| 宁乡县| 射洪县| 南昌县| 南靖县| 荔浦县| 梓潼县|