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パッケージを解凍すると、ディレクトリは大体このようになります.
  CXF WebService_第1张图片
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パッケージは次のとおりです.
CXF WebService_第2张图片
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をパブリッシュする必要があります.