Eclipse+Maven+Spring+CXF 構建webservice 服務

1、   軟件準備

Eclipse 4.2.1html

Maven 2.2.1java

Spring 3.2.6web

CXF 3.0.2spring

軟件下載和Eclipse 安裝 maven插件等請參考其餘文章。express

2、   步驟

1.        新建web工程,利用maven管理,以下:apache

 

  

工程名爲test,完成之後,項目結構以下圖:瀏覽器

src/main/java 準備放 java 程序;tomcat

src/main/resources準備放各種資源文件。服務器

2.        添加代碼session

1)        定義服務接口

 

[java]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. package com.test;  
  2.    
  3. import javax.jws.WebService;  
  4.    
  5. @WebService  
  6. public interface HelloWorld {  
  7.     public String sayHello();  
  8. }  

 

由於只是一個webservice的實驗程序,因此很是簡單,只有一個服務方法: sayHello(),利用 @WebService註解來聲明這是一個webservice的接口。

 

2)        實現服務類

 

[java]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. package com.test;  
  2.    
  3. import javax.jws.WebService;  
  4.    
  5. @WebService  
  6. public class HelloWorldImpl implements HelloWorld{  
  7.      
  8.     public String sayHello(){  
  9.         return "Hello world!";  
  10.     }  
  11. }  

 

 

完成java代碼添加後的項目結構以下:

 

 

3.        添加Spring-CXF 配置

在項目 src/main/webapp/WEB-INF 目錄下新建XML定義:cxf-servlet.xml以下:

 

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.         Licensed to the Apache Software Foundation (ASF) under one  
  4.         or more contributor license agreements. See the NOTICE file  
  5.         distributed with this work for additional information  
  6.         regarding copyright ownership. The ASF licenses this file  
  7.         to you under the Apache License, Version 2.0 (the  
  8.         "License"); you may not use this file except in compliance  
  9.         with the License. You may obtain a copy of the License at  
  10.          
  11.         http://www.apache.org/licenses/LICENSE-2.0  
  12.          
  13.         Unless required by applicable law or agreed to in writing,  
  14.         software distributed under the License is distributed on an  
  15.         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  16.         KIND, either express or implied. See the License for the  
  17.         specific language governing permissions and limitations  
  18.         under the License.  
  19. -->  
  20. <!-- START SNIPPET: beans -->  
  21. <beans xmlns="http://www.springframework.org/schema/beans"  
  22.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  23.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  24.     xsi:schemaLocation=" http://www.springframework.org/schema/beans  
  25.     http://www.springframework.org/schema/beans/spring-beans.xsd  
  26.     http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
  27.     <import resource="classpath:META-INF/cxf/cxf.xml"/>  
  28.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>  
  29.     <jaxws:endpoint id="helloWorld" implementor="com.test.HelloWorldImpl" address="/HelloWorld"/>  
  30. </beans>  
  31. <!-- END SNIPPET: beans -->  

 

該定義文件利用spring和CXF的功能,發佈一個ID爲helloWorld,實現類爲com.test.HelloWorldImpl,發佈相對路徑爲 /HelloWorld(對應絕對目錄爲: http://host:port/{WebAPPName}/HelloWorld)的 webservice。

 由於咱們須要用到CXF來作webservice,右鍵點擊項目中的POM.XML,添加apache-cxf依賴,以下圖:

 

4.        Web應用配置

修改 src/main/webapp/WEB-INF 目錄下的web.xml文件

 

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.   Licensed to the Apache Software Foundation (ASF) under one  
  4.   or more contributor license agreements. See the NOTICE file  
  5.   distributed with this work for additional information  
  6.   regarding copyright ownership. The ASF licenses this file  
  7.   to you under the Apache License, Version 2.0 (the  
  8.   "License"); you may not use this file except in compliance  
  9.   with the License. You may obtain a copy of the License at  
  10.    
  11.   http://www.apache.org/licenses/LICENSE-2.0  
  12.    
  13.   Unless required by applicable law or agreed to in writing,  
  14.   software distributed under the License is distributed on an  
  15.   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  16.   KIND, either express or implied. See the License for the  
  17.   specific language governing permissions and limitations  
  18.   under the License.  
  19. -->  
  20. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  21.     <display-name>cxf</display-name>  
  22.     <servlet>  
  23.         <description>Apache CXF Endpoint</description>  
  24.         <display-name>cxf</display-name>  
  25.         <servlet-name>cxf</servlet-name>  
  26.         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  27.         <load-on-startup>1</load-on-startup>  
  28.     </servlet>  
  29.     <servlet-mapping>  
  30.         <servlet-name>cxf</servlet-name>  
  31.         <url-pattern>/*</url-pattern>  
  32.     </servlet-mapping>  
  33.     <session-config>  
  34.         <session-timeout>60</session-timeout>  
  35.     </session-config>  
  36. </web-app>  

 

該文件其實是定義了處理webservice的CXF Servlet的映射關係。

 完成步驟3和4之後的工程目錄以下:

 

5.        編譯打包

利用maven(package -X)編譯打包成test.war

(在Eclipse上右擊工程名 Run as -> Maven build)

6.        將步驟5生成的test.war部署到tomcat服務器上

7.        訪問測試:

在瀏覽器上輸入:http://localhost:8080/test/,出現以下畫面就成功了:

 

點擊WSDL連接:

 

8.        編寫webservice client端代碼

1)        首先經過 Spring 與 CXF 的配置來定義 Web Service 的客戶端 Bean,在 src\main\resources 目錄下建立client-beans.xml 配置文件:

 

[html]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.         Licensed to the Apache Software Foundation (ASF) under one  
  4.         or more contributor license agreements. See the NOTICE file  
  5.         distributed with this work for additional information  
  6.         regarding copyright ownership. The ASF licenses this file  
  7.         to you under the Apache License, Version 2.0 (the  
  8.         "License"); you may not use this file except in compliance  
  9.         with the License. You may obtain a copy of the License at  
  10.          
  11.         http://www.apache.org/licenses/LICENSE-2.0  
  12.          
  13.         Unless required by applicable law or agreed to in writing,  
  14.         software distributed under the License is distributed on an  
  15.         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  16.         KIND, either express or implied. See the License for the  
  17.         specific language governing permissions and limitations  
  18.         under the License.  
  19. -->  
  20. <!-- START SNIPPET: beans -->  
  21. <beans xmlns="http://www.springframework.org/schema/beans"  
  22.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  23.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  24.     xsi:schemaLocation="  
  25.     http://www.springframework.org/schema/beans  
  26.     http://www.springframework.org/schema/beans/spring-beans.xsd  
  27.     http://cxf.apache.org/jaxws  
  28.      http://cxf.apache.org/schema/jaxws.xsd">  
  29.     <bean id="client" class="com.test.HelloWorld"  
  30.         factory-bean="clientFactory" factory-method="create"/>  
  31.     <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">  
  32.         <property name="serviceClass" value="com.test.HelloWorld"/>  
  33.         <property name="address" value="http://localhost:8080/test/HelloWorld"/>  
  34.     </bean>  
  35. </beans>  
  36. <!-- END SNIPPET: beans -->  

 

須要注意的是,該配置文件中的 address須要寫成發佈服務的絕對路徑。

 

2)        編寫客戶端java代碼: HelloWorldClient.java

 

[java]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. package com.test;  
  2.    
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.    
  5. public final class HelloWorldClient {  
  6.    
  7.     private HelloWorldClient() {  
  8.     }  
  9.    
  10.     public static void main(String args[]) throws Exception {  
  11.         // START SNIPPET: client  
  12.         ClassPathXmlApplicationContext context  
  13.             = new ClassPathXmlApplicationContext(new String[] {"client-beans.xml"});  
  14.    
  15.         HelloWorld client = (HelloWorld)context.getBean("client");  
  16.    
  17.         String response = client.sayHello();  
  18.         System.out.println("Response: " + response);  
  19.         System.exit(0);  
  20.         // END SNIPPET: client  
  21.     }  
  22. }  

 

注意,代碼中HelloWorldclient = (HelloWorld)context.getBean("client"); 的client須要與"client-beans.xml"中的 bean id一致才能找到這個服務。 

如今的項目結構以下:

 

3)        鏈接測試

在eclipse中直接按HelloWorldClient運行 Run as -> Java Application: 

 輸出的Hello world! 便是咱們發佈的HelloWorld的方法 sayHello()的輸出!這說明從服務發佈到客戶端鏈接都成功了。

相關文章
相關標籤/搜索