CXF官方網站:http://cxf.apache.org/html
準備:java
導入相關jar包:android
Jar包下載地址:http://cxf.apache.org/download.htmlweb
或者使用maven導入:spring
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.6</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.6</version> </dependency>
建立一個用於發佈WebService的類:apache
@WebService public class PhoneService { public Phone getPhoneInfo(String name) { Phone phone = new Phone(); phone.setName(name); if (name.endsWith("android")) { phone.setProduce("Oracle"); phone.setTime(new Date()); } else if (name.endsWith("apple")) { phone.setProduce("Apple"); phone.setTime(new Date()); } else { phone.setProduce("未知"); phone.setTime(new Date()); } return phone; } }
發佈該服務:瀏覽器
public static void main(String[] args) { // 發佈服務的類, 相似Endpoint JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean(); // 註冊服務器地址和端口 jaxWsServerFactoryBean.setAddress("http://127.0.0.1:8888/wwss/phoneService"); // 註冊哪一個類提供服務 jaxWsServerFactoryBean.setServiceBean(new at.flying.ws.service.PhoneService()); //配置輸入日誌攔截器 jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor()); //配置輸出日誌攔截器 jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 發佈一個cxf服務 jaxWsServerFactoryBean.create(); }
在瀏覽器地址欄輸入上述代碼設置的地址:http://127.0.0.1:8888/wwss/phoneService?wsdl服務器
便可看到發佈的服務的WSDL文件。app
而後根據該文件生成本地Java代碼,詳細操做請參考該篇文檔:http://my.oschina.net/u/2608182/blog/735762框架
而後根據本地Java代碼寫的測試函數以下:
@Test public void testws1() { PhoneServiceService phoneService = new PhoneServiceService(); PhoneService phoneService1 = phoneService.getPhoneServicePort(); //獲取到生成的本地Phone類,就能夠調用其中的任何對外開放的方法 Phone phone = phoneService1.getPhoneInfo("eeeeapple"); System.out.println(phone.getName()); System.out.println(phone.getProduce()); System.out.println(phone.getTime()); }
輸出結果以下:
Tips:
從以上步驟咱們能夠看到使用CXF框架跟使用JDK來發布WebService服務有如下幾點不一樣:
1.CXF須要導入額外的Jar包。
2.二者的發佈方式不一樣。
用於發佈WebService的類:
@WebService @Service("phoneService") public class PhoneService { public Phone getPhoneInfo(String name) { Phone phone = new Phone(); phone.setName(name); if (name.endsWith("android")) { phone.setProduce("Oracle"); phone.setTime(new Date()); } else if (name.endsWith("apple")) { phone.setProduce("Apple"); phone.setTime(new Date()); } else { phone.setProduce("未知"); phone.setTime(new Date()); } return phone; } }
<!--WebServcie-CXF配置Servlet start--> <servlet> <servlet-name>ws-cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ws-cxf</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws = "http://cxf.apache.org/jaxws" xsi:schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd "> <!--最終的訪問WSDL文件的地址是:http://localhost:8080/{1}/{2}/{3}?WSDL {1}:項目名,我這裏是SSMProjectMaven {2}:在web.xml文件中配置org.apache.cxf.transport.servlet.CXFServlet時的匹配路徑,我這裏是ws {3}:如下<jaxws:server></jaxws:server>標籤中的address屬性值,我這裏是phone 故個人WSDL訪問地址是:http://127.0.0.1:8080/SSMProjectMaven/ws/phone?wsdl --> <jaxws:server id = "ws_phone" serviceClass = "at.flying.ws.service.PhoneService" address = "/phone"> <!--發佈服務的Bean--> <jaxws:serviceBean> <ref bean = "phoneService" /> </jaxws:serviceBean> <!--配置輸入日誌攔截器--> <jaxws:inInterceptors> <bean class = "org.apache.cxf.interceptor.LoggingInInterceptor" /> </jaxws:inInterceptors> <!--配置輸出日誌攔截器--> <jaxws:outInterceptors> <bean class = "org.apache.cxf.interceptor.LoggingOutInterceptor" /> </jaxws:outInterceptors> </jaxws:server> </beans>
<!--引入WebService-CXF配置文件--> <import resource = "at/flying/ws/spring/xml/ws-spring.xml" />
訪問「http://127.0.0.1:8080/SSMProjectMaven/ws/」地址時,會出現發佈的WebService的詳細信息,以下:
若需測試發佈的WebService,則須要根據WSDL文件生成Java本地代碼。具體細節參見該篇博客:http://my.oschina.net/u/2608182/blog/735762
CXF官方網站:http://cxf.apache.org/