亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

轉:CXF學習筆記二:如何在Tomcat中創建、發布和

系統 2141 0

詳細介紹了在tomcat容器中創建、發布和訪問CXF服務的步驟和各種方法。

一、服務器端

1.添加CXF包

1)基本包:

commons-logging-1.1.1.jar

geronimo-activation_1.1_spec-1.0.2.jar

geronimo-annotation_1.0_spec-1.1.1.jar

geronimo-javamail_1.4_spec-1.6.jar

geronimo-jaxws_2.1_spec-1.0.jar

geronimo-servlet_2.5_spec-1.2.jar

geronimo-stax-api_1.0_spec-1.0.1.jar

geronimo-ws-metadata_2.0_spec-1.1.2.jar

jaxb-api-2.1.jar

jaxb-impl-2.1.12.jar

jetty-6.1.21.jar

jetty-util-6.1.21.jar

neethi-2.0.4.jar

saaj-api-1.3.jar

saaj-impl-1.3.2.jar

wsdl4j-1.6.2.jar

wstx-asl-3.2.8.jar

xml-resolver-1.2.jar

XmlSchema-1.4.5.jar

2)jsf和jstl(非必要,用MyEclipse創建Web Project時會自動加入,無須再添加)

jsf-api.jar

jsf-impl.jar

jstl-1.2.jar

3)cxf

cxf-2.2.4.jar

4)Spring jars,為XML Configuration添加Spring支持。

aopalliance-1.0.jar

spring-core-2.5.5.jar

spring-beans-2.5.5.jar

spring-context-2.5.5.jar

spring-web-2.5.5.jar

2.服務接口及實現

1)接口類,如HelloWorld.java:

package cxf.test;

import javax.jws.WebService;

@WebService

public interface HelloWorld

{

? // 一個簡單的方法,返回一個字符串

String say(String hello);

}

2)實現類,如HelloWorldImpl.java:

package cxf.test;

import javax.jws.WebService;??

// WebService實現類.?

// 使用@WebService指向Interface定義類即可. ?

@WebService(endpointInterface = "cxf.test.HelloWorld")??

public class HelloWorldImpl implements HelloWorld??

{??

??? public String say(String hello)??

??? {??

??????? return "hello " + hello;??

??? }??

}?

3.服務配置

1)web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

???? xmlns="http://java.sun.com/xml/ns/javaee"

???? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

???? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

???? http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

???? <context-param>

??????? <param-name>contextConfigLocation</param-name>

??????? <param-value>WEB-INF/beans.xml</param-value>

??? </context-param>

??? <listener>

??????? <listener-class>

??????????? org.springframework.web.context.ContextLoaderListener

??????? </listener-class>

??? </listener>

???? <servlet>

? ?????? <servlet-name>CXFServlet</servlet-name>

? ?????? <servlet-class>

?? ?????????? org.apache.cxf.transport.servlet.CXFServlet

? ?????? </servlet-class>

???? </servlet>

???? <servlet-mapping>

? ?????? <servlet-name>CXFServlet</servlet-name>

? ?????? <url-pattern>/services/*</url-pattern>

???? </servlet-mapping>

</web-app>

2)beans.xml

<?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">

???? <import resource="classpath:META-INF/cxf/cxf.xml" />

???? <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />

???? <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

???? <jaxws:endpoint id="webServiceHelloWorld"

???????? address="/HelloWorld"

???????? implementor="cxf.test.HelloWorldImpl"/>

</beans>

注:服務無需諸如index.jsp之類的配置,MyEclipse自動加入的可刪除,對服務及配置無任何影響。

4.服務發布(到Tomcat)

方法一:通過MyEclipse發布

點擊工具欄 ?圖標,或者右鍵單擊項目 → MyEclipse → Add and Remove Project Deployments。

方法二:使用Ant。

二、客戶端

創建Web Project,執行下列步驟即可。無須設置web.xml。

1.添加CXF包

針對不同的方法,需要的包不盡相同。如下面“3.服務調用”的方法三,需要如下包:

commons-logging-1.1.1.jar

cxf-2.2.4.jar

neethi-2.0.4.jar

spring-core-2.5.5.jar

spring-beans-2.5.5.jar

spring-context-2.5.5.jar

wsdl4j-1.6.2.jar

XmlSchema-1.4.5.jar

2.獲取服務服務接口類(類似于C/C++中的.h頭文件)

方法一:直接從原項目中copy

這當然是最簡單的方法,也是最“難”的方法(如果服務不是自己做的,顯然沒法獲得)。

方法二:從wsdl文檔中生成。

需要先安裝cxf程序包。生成步驟如下:

1)??? 安裝cxf,設置環境變量,如:D:\Apache\apache-cxf-2.2.4;同時,PATH后加上“;%CXF_HOME%\bin”(可選)。wsdl2java的用法如下:
wsdl2java –p 包名 –d 目錄名 wsdl路徑
如:wsdl2java –p demo.service.client –d e:\src htt://localhost:8080/helloWorld?wsdl
-p?????????? 指定其wsdl的命名空間,也就是要生成代碼的包名
-d?????????? 指定要產生代碼所在目錄
-client???? 生成客戶端測試web service的代碼
-server??? 生成服務器啟動web service的代碼
-impl?????? 生成web service的實現代碼
-ant???????? 生成build.xml文件
-compile? 生成代碼后編譯
-quient??? 靜默模式,不輸出警告與錯誤信息
-all????????? 生成所有開始端點代碼:types,service proxy,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

2)??? 執行wsdl2java批處理程序,如:
wsdl2java -p cxf.test -d d:\src -server http://localhost:8080/CXFTomcat/services/ HelloWorld?wsdl

3)??? 將java接口類導入項目。
上一步生成的java類文件很多,一般的應用中只要將說明接口的那個類文件導入項目即可,如上例生成的HelloWorld.java文件。

3.服務調用

方法一:使用jws的高層封裝,如:

package cxf.test;

import javax.xml.namespace.QName;

import javax.xml.ws.Service;

import javax.xml.ws.soap.SOAPBinding;

import cxf.test.HelloWorld; ??? // necessary

public final class Client {

??? private static final QName SERVICE_NAME

??????? = new QName("http://test.cxf/", "HelloWorld");? // 首參為接口實現類包名的反綴

??? private static final QName PORT_NAME

??????? = new QName("http://test.cxf/", "HelloWorldPort");

??? private Client() { }

??? public static void main(String args[]) throws Exception {

??????? Service service = Service.create(SERVICE_NAME);

??????? // Endpoint Address

??????? String endpointAddress = "http://localhost:8080/CXFTomcat/services/HelloWorld";

????? ??// Add a port to the Service

??????? service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);

??????? HelloWorld hw = service.getPort(HelloWorld. class );

??????? System. out .println(hw.say("World"));

??? }

}

方法二:使用較下層的代碼更加精確的控制程序的行為,如:

package cxf.test;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import cxf.test.HelloWorld; ??? // necessary

public final class Client {

??? private Client() { }

??? public static void main(String args[]) throws Exception {

??? ??JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

??? ? ??factoryBean.getInInterceptors().add(new LoggingInInterceptor());(可選)

??? ? ??factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());(可選)

??? ??factoryBean.setServiceClass(cxf.test.HelloWorld. class );

??? ??factoryBean.setAddress("http://localhost:8080/CXFTomcat/services/HelloWorld");

??? ??HelloWorld client = (HelloWorld)factoryBean.create();

??? ??System. out .println(client.say("God"));

??? ??System. exit (0);

??? }

}

備注:LoggingInInterceptor和LoggingOutInterceptor是日志攔截器,用于輸入和輸出時顯示日志。使用與否并不影響程序的行為。

方法三:使用Spring,例如:

package cxf.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import cxf.test.HelloWorld; // necessary

public final class Client {

??? private Client() { }

??? public static void main(String args[]) throws Exception {

??????? ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"cxf/test/client-beans.xml"});

??????? HelloWorld client = (HelloWorld)context.getBean("client");

??????? String response = client.say("Joe");

??????? System. out .println("Response: " + response);

??????? System. exit (0);

??? }

}

注意:要想使用Spring來完成,在cxf.test包中必須有client-beans.xml存在,內容如下:

<?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/schema/jaxws.xsd">

??? <bean id="client" class="cxf.test.HelloWorld"

????? factory-bean="clientFactory" factory-method="create"/>

??? <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">

???? ? <property name="serviceClass" value="cxf.test.HelloWorld"/>

???? ? <property name="address" value="http://localhost:8080/CXFTomcat/services/HelloWorld"/>

???? </bean>

</beans>

4.執行

Run As Java Application

轉:CXF學習筆記二:如何在Tomcat中創建、發布和訪問基于CXF的服務


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产3344永久在线观看视频 | 国产成人aa视频在线观看 | 国产欧美日韩精品专区 | 手机在线看片国产日韩生活片 | 在线欧美国产 | 综合亚洲欧美日韩一区二区 | 久久久久久久国产精品毛片 | 成人免费视频国产 | 九月激情网 | 毛片女女女女女女女女女 | 国产精品高清在线观看地址 | 激情九九 | 五月天婷婷网址 | 香蕉青草久久成人网 | 日本一本久 | 久草手机在线观看 | 久久成人视| 天堂亚洲国产日韩在线看 | 天天曰夜夜操 | 日本九九视频 | 亚洲综合精品一区 | 在线免费国产视频 | 四虎影视永久地址www成人 | 在线欧美视频免费观看国产 | 久久精品免视看国产陈冠希 | 成 人 黄 色 大 片全部 | 成人影院vs一区二区 | www.精品视频| 久久久夜色精品国产噜噜 | 久久国产精品亚洲 | 天天爽夜夜爽天天做夜夜做 | 欧美日韩国产高清精卡 | 久久久不卡国产精品一区二区 | 亚洲精品国产第一区二区三区 | 亚洲综合色丁香麻豆 | 天天视频一区二区三区 | 午夜在线网站 | 四虎影视免费看 | 日本高清中文字幕视频在线 | 91无限资源 | 综合亚洲欧美 |