CXF WebService
8786 ワード
概要
Apache CXFはサービスフレームワークであり、サービスの作成を簡略化し、CXFはJAX-WS 2を実現した.0仕様でJAX-WS 2を通過する.0 TCK; CXFとSpringのシームレスな統合;CXFは多種類の伝送プロトコル(HTTP、JMS、Corbaなど)をサポートし、多種類のBindingデータフォーマット(SOAP、XML、JSONなど)をサポートし、多種類のDataBindingデータ型(JAXB、Aegis)をサポートする.CXFはInterceptorのアーキテクチャに基づいており、フレームワーク全体を非常に拡張しやすい.
準備作業
1、CXF公式サイト:http://cxf.apache.org/
2、Jarパッケージのダウンロードアドレス:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.3/apache-cxf-2.3.3.zip
下のjarパッケージを解凍すると、ディレクトリは大体このようになります.
binディレクトリは、一般的なdosコンソールコマンドツールを提供します.
docsヘルプドキュメント
lib jarパッケージ、依存ライブラリ
lib-samplesもjarパッケージでjetty、httpclients、junitなどのjarパッケージがあります
ModulesパッケージWebServiceモジュール
サンプルdemo
3、ソースのダウンロード:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.3/apache-cxf-2.3.3-src.zip
ソースコードを見て、CXF WebServiceの理解と学習に役立つことがあります.
4、CXFの特性
コード生成ツールあり:Java to WSDL;WSDL to Java;XSD to WSDL;WSDL to XML;WSDL to SOAP;WSDL to Service;
JAX-WS、JAX-WSA、JSR-181とSAAJをサポートする.SOAP 1.1、1.2、WS-I BasicProfile、WS-security、WS-Addressing、WS-ROM、WS-Policyをサポートする.WSDL 1.1、2.0をサポートする.MTOMをサポートする;JavaScriptは、YokoでCORBAをサポートする.TuscanyでSCAをサポートする.ServiceMixによるJBIのサポート
Jettyアプリケーションサーバ内蔵
CXF入門例
もう一つのHelloWorldの例では、古いHelloWorldは入門の古典です.基礎も身につけなければならないので、HelloWorldWebServiceを見てみましょう.簡単です.
必要なjarパッケージは次のとおりです.
HelloWorldServiceサーバー側コード
説明するのは、上のサーバ側コードがJDK 5の新しい特性Annotationを運用しているので、これはとても使いやすいです.
@SOAPBinding(style=Style.RPC)注記を追加しないと、例外が発生することに注意してください.
またjdkバージョンが1.6であれば、上記の異常も発生します.
解決策は次のとおりです.
1>まずaptコマンドでメインプログラムをコンパイルし、javaファイルを生成します.
2>バージョンjdk 1へのJDKのアップグレード.6 u 17以降
ハローワールドサービスのリリース
コードは次のとおりです.
上のmain関数を実行した後、異常が見つからなかった場合.基本的な情報は次のとおりです.
では、WebBrowserで次のように要求します.
http://localhost:9000/helloWorld?wsdlxmlの内容が見えます.
クライアント呼び出しWebServiceのインタフェースのカスタマイズ
クライアント呼び出しWebServiceコードの作成
上記のプログラムを実行すると、次のようになります.
cxf生成webserviceクライアント
方法1:
テストクラスを書きます.
方法2:
環境変数%CXF_の設定HOME%=E:/WebServices/CXF/apache-cxf-2.1.1/apache-cxf-2.1.1(私のディレクトリを例に)、PATHの後に追加します.%CXF_HOME%/bin
cmdコマンドラインにwsdl 2 javaを入力し、その用法表示構成が表示されたら入力します.
入力:wsdl 2 java-d src-clienthttp://localhost:9000/helloWorld?wsdl
wsdl 2 java用法:wsdl 2 java-p com-d src-all aa.wsdl-pは、そのwsdlのネーミングスペース、すなわちコードを生成するパッケージ名を指定する:-dコードを生成するディレクトリ-client生成クライアントがウェブサービスをテストするコードを指定する-server生成サーバがウェブサービスを起動するコード-impl生成ウェブサービスの実装コード-ant生成build.xmlファイル-all生成すべての開始端点コード:types,service proxy,,service interface,server mainline,client mainline,implementation object,and an Ant build.xml file. 詳しい使い方は以下の通りです.http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
注意:実行時には、必ずweb seviceをパブリッシュする必要があります.
Apache CXFはサービスフレームワークであり、サービスの作成を簡略化し、CXFはJAX-WS 2を実現した.0仕様でJAX-WS 2を通過する.0 TCK; CXFとSpringのシームレスな統合;CXFは多種類の伝送プロトコル(HTTP、JMS、Corbaなど)をサポートし、多種類のBindingデータフォーマット(SOAP、XML、JSONなど)をサポートし、多種類のDataBindingデータ型(JAXB、Aegis)をサポートする.CXFはInterceptorのアーキテクチャに基づいており、フレームワーク全体を非常に拡張しやすい.
準備作業
1、CXF公式サイト:http://cxf.apache.org/
2、Jarパッケージのダウンロードアドレス:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.3/apache-cxf-2.3.3.zip
下のjarパッケージを解凍すると、ディレクトリは大体このようになります.
binディレクトリは、一般的なdosコンソールコマンドツールを提供します.
docsヘルプドキュメント
lib jarパッケージ、依存ライブラリ
lib-samplesもjarパッケージでjetty、httpclients、junitなどのjarパッケージがあります
ModulesパッケージWebServiceモジュール
サンプルdemo
3、ソースのダウンロード:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.3/apache-cxf-2.3.3-src.zip
ソースコードを見て、CXF WebServiceの理解と学習に役立つことがあります.
4、CXFの特性
コード生成ツールあり:Java to WSDL;WSDL to Java;XSD to WSDL;WSDL to XML;WSDL to SOAP;WSDL to Service;
JAX-WS、JAX-WSA、JSR-181とSAAJをサポートする.SOAP 1.1、1.2、WS-I BasicProfile、WS-security、WS-Addressing、WS-ROM、WS-Policyをサポートする.WSDL 1.1、2.0をサポートする.MTOMをサポートする;JavaScriptは、YokoでCORBAをサポートする.TuscanyでSCAをサポートする.ServiceMixによるJBIのサポート
Jettyアプリケーションサーバ内蔵
CXF入門例
もう一つのHelloWorldの例では、古いHelloWorldは入門の古典です.基礎も身につけなければならないので、HelloWorldWebServiceを見てみましょう.簡単です.
必要なjarパッケージは次のとおりです.
HelloWorldServiceサーバー側コード
package com.hoo.service;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
/**
* <b>function:</b>CXF WebService helloWorld
* @author hoojo
* @createDate 2011-3-16 08:29:07
* @file HelloWorld.java
* @package com.hoo.service
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
@WebService
@SOAPBinding(style = Style.RPC)
public class HelloWorldService {
public String sayHello(@WebParam(name = "name") String name) {
return name + " say: Hello World ";
}
}
説明するのは、上のサーバ側コードがJDK 5の新しい特性Annotationを運用しているので、これはとても使いやすいです.
@SOAPBinding(style=Style.RPC)注記を追加しないと、例外が発生することに注意してください.
com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error
またjdkバージョンが1.6であれば、上記の異常も発生します.
解決策は次のとおりです.
1>まずaptコマンドでメインプログラムをコンパイルし、javaファイルを生成します.
2>バージョンjdk 1へのJDKのアップグレード.6 u 17以降
ハローワールドサービスのリリース
コードは次のとおりです.
package com.hoo.service.deploy;
import javax.xml.ws.Endpoint;
import com.hoo.service.HelloWorldService;
/**
* <b>function:</b> CXF WebService
* @author hoojo
* @createDate 2011-3-17 09:24:33
* @file DeployHelloWorldService.java
* @package com.hoo.deploy
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class DeployHelloWorldService {
/**
* <b>function:</b> WebService
* @author hoojo
*/
public static void deployService() {
System.out.println("Server start ……");
HelloWorldService service = new HelloWorldService();
String address = "http://localhost:9000/helloWorld";
Endpoint.publish(address, service);
}
public static void main(String[] args) throws InterruptedException {
// WebService
deployService();
System.out.println("server ready ……");
Thread.sleep(1000 * 60);
System.out.println("server exiting");
// 60
System.exit(0);
}
}
上のmain関数を実行した後、異常が見つからなかった場合.基本的な情報は次のとおりです.
Server start ……
2011-3-17 10:17:25 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
: Creating Service {http://service.hoo.com/}HelloWorldServiceService from class com.hoo.service.HelloWorldService
2011-3-17 10:17:25 org.apache.cxf.endpoint.ServerImpl initDestination
: Setting the server's publish address to be http://localhost:9000/helloWorld
2011-03-17 10:17:25.375:INFO::jetty-7.2.2.v20101205
2011-03-17 10:17:25.468:INFO::Started SelectChannelConnector@localhost:9000
server ready ……
では、WebBrowserで次のように要求します.
http://localhost:9000/helloWorld?wsdlxmlの内容が見えます.
クライアント呼び出しWebServiceのインタフェースのカスタマイズ
package com.hoo.service;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
* <b>function:</b> WebService
* @author hoojo
* @createDate 2011-3-17 09:00:00
* @file IHelloWorldService.java
* @package com.hoo.service
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
@WebService
public interface IHelloWorldService {
public String sayHello(@WebParam(name = "name") String name);
}
クライアント呼び出しWebServiceコードの作成
package com.hoo.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.hoo.service.IHelloWorldService;
/**
* <b>function:</b>CXF WebService
* @author hoojo
* @createDate 2011-3-16 09:03:49
* @file HelloWorldServiceClient.java
* @package com.hoo.client
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class HelloWorldServiceClient {
public static void main(String[] args) {
// WebService
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(IHelloWorldService.class);
factory.setAddress("http://localhost:9000/helloWorld");
IHelloWorldService service = (IHelloWorldService) factory.create();
System.out.println("[result]" + service.sayHello("hoojo"));
}
}
上記のプログラムを実行すると、次のようになります.
2011-3-17 10:23:34 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
: Creating Service {http://service.hoo.com/}IHelloWorldServiceService from class com.hoo.service.IHelloWorldService
[result]hoojo say: Hello World
cxf生成webserviceクライアント
方法1:
テストクラスを書きます.
import org.apache.cxf.tools.wsdlto.WSDLToJava;
public class Test {
public static void main(String[] args) {
System.out.println("debug");
WSDLToJava.main(new String[] {
"-impl",
"-client",
"-d","src",
"-p","com.cdg.cdp.manage.ws.policyno.impl" ,
"http://192.168.76.167:8080/manage/ws/queryPolicyNo?wsdl"});
System.out.println("Done!");
}
}
方法2:
環境変数%CXF_の設定HOME%=E:/WebServices/CXF/apache-cxf-2.1.1/apache-cxf-2.1.1(私のディレクトリを例に)、PATHの後に追加します.%CXF_HOME%/bin
cmdコマンドラインにwsdl 2 javaを入力し、その用法表示構成が表示されたら入力します.
入力:wsdl 2 java-d src-clienthttp://localhost:9000/helloWorld?wsdl
wsdl 2 java用法:wsdl 2 java-p com-d src-all aa.wsdl-pは、そのwsdlのネーミングスペース、すなわちコードを生成するパッケージ名を指定する:-dコードを生成するディレクトリ-client生成クライアントがウェブサービスをテストするコードを指定する-server生成サーバがウェブサービスを起動するコード-impl生成ウェブサービスの実装コード-ant生成build.xmlファイル-all生成すべての開始端点コード:types,service proxy,,service interface,server mainline,client mainline,implementation object,and an Ant build.xml file. 詳しい使い方は以下の通りです.http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
注意:実行時には、必ずweb seviceをパブリッシュする必要があります.