CXF入門チュートリアル(1)-最初のウェブサービス
5034 ワード
プロジェクトではwebServiceを使用します.今日午前、直接公式サイトでCXFを学びました.本文は公式ドキュメントA simple JAX-WSサービスの翻訳と実践に由来し、最新のcxf-2.6.1バージョンに対して依存するjarパッケージを調整し、コードの中で原文に言及されていないいくつかの種類を補充しました.勉強しながら記録し、忘れないように、ついでに共有します.
この例とcxf-2.6.1リリースの例 java_first_jaxws これに対応してCXF 2.0.1以降に適用されます.
本文も筆者のコードのダウンロードアドレスを添付して、ダウンロードを歓迎します;プロジェクトには参照されたjarパッケージが含まれていません.使用者は、文書のスクリーンショットを参照して、対応するuser Libraryを作成して使用できます.
http://download.csdn.net/detail/neareast/4410086
環境の構築
最も使いやすいIDEを開き、新しいプロジェクトを作成します.筆者はEclipse indigoを使用して、基本的なJavaプロジェクトを作成しました.私たちが最初にしなければならないことは、プロジェクトにCXF依存クラスを追加することです.CXFのリリース版libディレクトリで対応するjarパッケージを見つけることができます.リリース版によっては、jarパッケージのバージョン番号が変化する可能性があります.
Springのパッケージ(オプションで、XML構成のサポートが必要な場合に導入):
もちろん、最も重要なCXFのバッグもあります.
cxf-2.6.1のリリースでは、上記のリストとは大きく異なり、筆者はEclipseで「cxf-dependency」というuser Libraryを作成しました.最終的に使用するjarパッケージのリストは次の図のようになります.
サービスの書き込み開始
まず、sayHiを操作するserivceインタフェースを書きます.名前を提出した人に挨拶する役割を果たしています.
WebParam注記は必須です.javaインタフェースのコンパイル後の.classファイルにはパラメータの名前が保存されていないため、注記が付けられていない場合はarg 0と名前が付けられます.インタフェース実装部の例は以下の通りである.
@WebService注記は、CXFにWSDLを作成するためにどのインタフェースを使用するかを知らせます.この例ではiHelloWorldインタフェースです.
公開サービス
初めて直接実行したとき、プログラムが間違っていました.
Exception in thread "main"javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: Could not load Webservice SEI
コードをチェックすると、HelloWorldImplクラスの@WebService注釈が間違っていて、endpointInterface属性の値が正しく書かれていません.正しいインタフェースパスに変更したら、プログラム実行OKです.
サービスプログラムが起動したら、ブラウザでアクセスします http://localhost:9000/helloWorld?wsdl ,下図に示すようなXMLファイルが表示されると、私たちの最初のwebserviceが作成されました.
この例とcxf-2.6.1リリースの例 java_first_jaxws これに対応してCXF 2.0.1以降に適用されます.
本文も筆者のコードのダウンロードアドレスを添付して、ダウンロードを歓迎します;プロジェクトには参照されたjarパッケージが含まれていません.使用者は、文書のスクリーンショットを参照して、対応するuser Libraryを作成して使用できます.
http://download.csdn.net/detail/neareast/4410086
環境の構築
最も使いやすいIDEを開き、新しいプロジェクトを作成します.筆者はEclipse indigoを使用して、基本的なJavaプロジェクトを作成しました.私たちが最初にしなければならないことは、プロジェクトにCXF依存クラスを追加することです.CXFのリリース版libディレクトリで対応するjarパッケージを見つけることができます.リリース版によっては、jarパッケージのバージョン番号が変化する可能性があります.
commons-logging-1.1.1.jar
geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181)
geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar)
geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api 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
XmlSchema-1.4.5.jar
xml-resolver-1.2.jar
Springのパッケージ(オプションで、XML構成のサポートが必要な場合に導入):
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
もちろん、最も重要なCXFのバッグもあります.
cxf-2.2.3.jar
cxf-2.6.1のリリースでは、上記のリストとは大きく異なり、筆者はEclipseで「cxf-dependency」というuser Libraryを作成しました.最終的に使用するjarパッケージのリストは次の図のようになります.
サービスの書き込み開始
まず、sayHiを操作するserivceインタフェースを書きます.名前を提出した人に挨拶する役割を果たしています.
package com.neareast.test.cxf.service;
import java.util.Map;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.neareast.test.cxf.bean.User;
import com.neareast.test.cxf.util.IntegerUserMapAdapter;
@WebService
public interface iHelloWorld {
// WebParam , xml
String sayHi(@WebParam(name="text") String text);
/* Advanced usecase of passing an Interface in. JAX-WS/JAXB does not
* support interfaces directly. Special XmlAdapter classes need to
* be written to handle them
*/
String sayHiToUser(User user);
/* Map passing
* JAXB also does not support Maps. It handles Lists great, but Maps are
* not supported directly. They also require use of a XmlAdapter to map
* the maps into beans that JAXB can use.
*/
@XmlJavaTypeAdapter(IntegerUserMapAdapter.class)
Map getUsers();
}
WebParam注記は必須です.javaインタフェースのコンパイル後の.classファイルにはパラメータの名前が保存されていないため、注記が付けられていない場合はarg 0と名前が付けられます.インタフェース実装部の例は以下の通りである.
package com.neareast.test.cxf.service;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.jws.WebService;
import com.neareast.test.cxf.bean.User;
@WebService(endpointInterface = "com.neareast.test.cxf.service.iHelloWorld", serviceName = "HelloWorld")
public class HelloWorldImpl implements iHelloWorld {
Map users = new LinkedHashMap();
public String sayHi(String text) {
System.out.println("sayHi called");
return "Hello " + text;
}
public String sayHiToUser(User user) {
System.out.println("sayHiToUser called");
users.put(users.size() + 1, user);
return "Hello " + user.getName();
}
public Map getUsers() {
System.out.println("getUsers called");
return users;
}
}
@WebService注記は、CXFにWSDLを作成するためにどのインタフェースを使用するかを知らせます.この例ではiHelloWorldインタフェースです.
公開サービス
package com.neareast.test.cxf.service;
import javax.xml.ws.Endpoint;
public class ServiceTest {
protected ServiceTest() throws Exception {
// START SNIPPET: publish
System.out.println("Starting Server");
HelloWorldImpl implementor = new HelloWorldImpl();
String address = "http://localhost:9000/helloWorld";
Endpoint.publish(address, implementor);
// END SNIPPET: publish
}
public static void main(String args[]) throws Exception {
new ServiceTest();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
初めて直接実行したとき、プログラムが間違っていました.
Exception in thread "main"javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: Could not load Webservice SEI
コードをチェックすると、HelloWorldImplクラスの@WebService注釈が間違っていて、endpointInterface属性の値が正しく書かれていません.正しいインタフェースパスに変更したら、プログラム実行OKです.
サービスプログラムが起動したら、ブラウザでアクセスします http://localhost:9000/helloWorld?wsdl ,下図に示すようなXMLファイルが表示されると、私たちの最初のwebserviceが作成されました.