cxf学習まとめ

12081 ワード

この間cxf Webserviceのことを勉強して、たくさんのノートを書きました.くだらないことは言わないで、整理がまだ完全ではなくて、レイアウトが少し乱れています.私はできるだけ勉強の手順に従って書きます.
   
   

1.目的


本稿では、Apache CXFについて簡単に説明し、Apache CXF JAX-RSによるRESTful Web Services開発の導入、クライアント開発について説明します.

2.Apache CXFの概要


Apache CXF=Celtix+XFire、Apache CXFの前身はApache CeltiXfireと呼ばれ、現在では正式にApache CXFと改称されており、以下CXFと略称する.CXFはCeltixとXFireの2つのオープンソースプロジェクトのエッセンスを継承し、JAX-WSの全面的なサポートを提供し、Binding、DataBinding、Transport、および様々なFormatのサポートを提供し、実際のプロジェクトのニーズに応じてコード優先(Code First)またはWSDL優先(WSDL First)を採用してWeb Servicesのリリースと使用を簡単に実現することができます.現在もApacheの孵化プロジェクトにすぎません.
Apache CXFはオープンソースのServicesフレームワークで、CXFはFrontendプログラミングAPIを使用してJAX-WSのようなServicesの構築と開発を支援します.これらのServicesは、SOAP、XML/HTTP、RESTful HTTP、CORBAなど、さまざまなプロトコルをサポートし、HTTP、JMS、JBIなど、さまざまな転送プロトコルで実行できます.CXFは、Servicesの作成を大幅に簡素化し、XFireの伝統を継承し、Springとシームレスに統合することができます.
きのうとくせい
CXFは多くの機能特性を含んでいるが、主に以下のいくつかの面に集中している.
1.Webサービス標準をサポートする:CXFはSOAP、Basic Profile、WS-Addressing、WS-Policy、WS-RealiableMessaging、WS-Securityを含む多種のWebサービス標準をサポートする.
2.Frontends:CXFは複数の「Frontend」プログラミングモデルをサポートし、CXFはJAX-WS API(JAX-WS 2.0 TCKバージョンに従う)を実現している.また、Annotation注釈を必要とせずにクライアントとEndPointの作成を可能にする「simple frontend」も含まれている.CXFはWSDL優先開発にも対応し,Javaからのコード優先開発モデルにも対応する.
3.使いやすい:CXFはより直感的で使いやすいように設計されている.コード優先のServicesを迅速に構築するために多くの簡単なAPIがあり、各種Mavenのプラグインも統合を容易にし、JAX-WS APIをサポートし、Spring 2.0のより簡略化されたXML構成方式をサポートするなどしている.
4.バイナリおよびレガシープロトコルをサポートする:CXFの設計はダイヤル可能なアーキテクチャであり、XMLをサポートすることもできるし、XML以外のタイプバインドをサポートすることもできる.例えば、JSONとCORBAである.
詳しくはApache CXF公式サイトを参照してください.http://cxf.apache.org

3.JAVA開発環境


3.1コンポーネントリスト


次のコンポーネントは、事前にダウンロードしてインストールする必要があります.
コンポーネント
説明
コメント
JDK
Java環境、インストール
一般的に1.6以上
TOMCAT
DataNode&Task JobTracker
一般6.0以上
APACHE CXF
RESTful Web Services開発jarおよびツール
2.7.8バージョン、インストールなしでダウンロード:http://cxf.apache.org

3.2コンポーネントのインストール


JDKとTOMCATのインストールについては説明しません.APACHE CXFのダウンロード後、直接解凍すればいい.ディレクトリ構造は以下の通りである.
apche-cxf-2.7.8:
RESTful Web Servicesの開発にはlibディレクトリのjarパッケージが必要です.

4.EclipseでのRESTful Web Serives開発


4.1シーン紹介


StudentsのCXF RESTful Web Servicesを作成し、Tomcatに配置します.その後、ユーザーはクライアントでHTTPプロトコルを通じてウェブリクエストをサービス側に送信して、Studentリソースを読み取り、作成、変更、削除することができます.
主な内容は次のとおりです.
l RESTfulサービス開発
l RESTfulサービスの導入
l RESTfulクライアント開発

4.2 CXF非集積サービス開発


Apache CXFは他のフレームワークと容易に統合できますが、単独で使用することもできます.ここでは非統合の開発プロセスについて説明します.

新規Dynamic Webプロジェクト


プロジェクト名:CXFRestWithoutSpringのDynamic Webプロジェクトを新規作成します.
ステップ1:File->New->Dynamic Webプロジェクト
ステップ2:Webプロジェクト名CXFRestWithoutSpringを入力し、その他はデフォルトのままにします.
ステップ3:Nextをクリックし、完了を確認します.Webプロジェクトのディレクトリ構造は以下の通りです.

4.2.1 jarをBuild Pathに追加する


ダウンロードしたApache CXFディレクトリapche-cxf-2.7.8から、RESTful WebServicesプロジェクトに必要なjarパッケージをWebContent/WEB-INF/libディレクトリに追加し、Build Pathに追加します.
WebContent/WEB-INF/libディレクトリに追加されたjarパッケージ:
Build Path構成:

4.2.2新規POJO類


POJO(Plain Old Java Object)クラスは、一般的なjavaクラスであり、主にWebサービスで使用する基礎クラスを作成します.もちろん、これらのベースクラスを必要とせずに、Web Servicesを直接作成することもできます.
ここでは、Student POJOクラスを作成します.
CXFはクライアントとサービス側の通信時にjavaオブジェクトとXMLの間で変換する必要があり、CXFはHTTPプロトコルを介してXMLフォーマットを伝送するため、以下の赤色のコードが必要であることに注意してください.
package com.study;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Student")
publicclass Student {
private String name;
public String getName()
{
returnname;
}
publicvoid setName(String name)
{
this.name = name;
}
}

4.2.3 RESTful Web Servicesインタフェースの新規作成


インタフェースは簡単で、主に統一的なアクセスインタフェース方式を提供し、異なる機能の実現を便利にするためである.@PATH,@GET,@POST,@PUT,@DELETEなどのインタフェースファイルにJAX-RSの寸法を追加できます.
package com.study;
publicinterface ChangeStudentDetails {
Student changeName(Student student);
Student getName();
}

4.2.4 RESTful Web Services実装クラスの新規作成


JavaクラスがWeb Servicesリソースとしてマークされている緑色のマークアップコードに注意してください.
package com.study;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/Students")
@Consumes("application/xml")
@Produces("application/xml")
public class ChangeStudentDetailsImpl implements ChangeStudentDetails {
@POST
@Path("/changeName")
public Student changeName(Student student) {
student.setName("HELLO " + student.getName());
return student;
}
@GET
@Path("/getName")
public Student getName() {
Student student = new Student();
student.setName("Rockey");
return student;
}
}

JAX-RS表記紹介:
@Path、リソースクラスまたはメソッドの相対パスの寸法付け
@GET,@PUT,@POST,@DELETE,表記方法はHTTPリクエストのタイプである.
@Produces,寸法が返されるMIMEメディアタイプ
@Consumes,要求を受け入れるMIMEメディアタイプをマーク
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,それぞれの表記方法のパラメータはHTTPリクエストの異なる位置から来ており,例えば@PathParamはURLのパスから,@QueryParamはURLのクエリーパラメータから,@HeaderParamはHTTPリクエストのヘッダ情報から,@CookieParamはHTTPリクエストのCookieから来ている.
詳しくはJSR-339規格を参照してください.

4.2.5 webを配置する。xml


WebContent/WEB-INF/web.xmlプロファイルのweb-appノードには、次のようなクラス容量が追加されています.
赤い部分に注意.
<servlet>
<description></description>
<display-name>CXFNonSpringJaxrsServlet</display-name>
<servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
<init-param>
<param-name>jaxrs.serviceClasses</param-name>
<param-value>com.study.ChangeStudentDetailsImpl</param-value>
</init-param>
<init-param>
<param-name>jaxrs.address</param-name>
<param-value>/rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

4.2.6 REST Web Servicesの実行


プロジェクト名CXFRestWithoutSpringを右クリックし、Run As->Run on Serverを選択

4.2.7運行結果の確認


IEで開くhttp://localhost:8080/CXFRestWithoutSpring/
クリックhttp://localhost:8080/CXFRestWithoutSpring/rest?_wadlRESTful Web Services定義を表示できます.

4.2.8 IEテストRESTful WebServices


IEで開くhttp://localhost:8080/CXFRestWithoutSpring/rest/Students/getNameつまり、RESTful WebServicesのgetNameメソッドを呼び出します.
結果を返します.

4.3 CXF集積Springサービス開発


CXF集積Springサービス開発は非集積サービス開発の過程と基本的に一致しているが、Springに関連するjarパッケージをいくつか追加し、Springの構成を追加し、webを修正する必要がある.xml構成.

4.3.1新規Dynamic Webプロジェクト


プロジェクト名:CXFRestWithoutSpringのDynamic Webプロジェクトを新規作成します.その他参考4.1.1章.

4.3.2 jarをBuild Pathに追加


ダウンロードしたApache CXFディレクトリapche-cxf-2.7.8から、RESTful WebServicesプロジェクトに必要なjarパッケージをWebContent/WEB-INF/libディレクトリに追加し、Build Pathに追加します.
WebContent/WEB-INF/libディレクトリに追加されたjarパッケージ:
赤い輪の中のSpringに関するjarに注意してください.

4.3.3新規POJO類


4.1.3章を参照する.

4.3.4新規RESTful Web Servicesインタフェース


4.1.4章を参照.

4.3.5 RESTful Web Services実装クラスの新規作成


4.1.5章を参照.

4.3.6 Spring統合構成


WebContent/WEB-INF/cxfを作成する.xmlファイル、CXFとSpringの統合を構成します.内容は次のとおりです.
注意赤い部分は追加する必要があります
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<importresource="classpath:META-INF/cxf/cxf.xml"/>
<jaxrs:serverid="base"address="/rest">
<jaxrs:serviceBeans>
<refbean="StudentService"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<beanid="StudentService"class="com.study.ChangeStudentDetailsImpl"/>
</beans>

4.3.7 webを配置する.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/cxf.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>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

4.3.8 REST Web Servicesの実行


4.1.7章を参照してください.

4.3.9運転結果の表示


IEで開くhttp://localhost:8080/CXFRestWithSpring/
4.1.9章参照.

4.3.10 IEテストRESTful WebServices


IEで開くhttp://localhost:8080/CXFRestWithSpring/rest/Students/getName
4.1.9章参照.

4.4 CXF Webサービスの導入


4.4.1 RESTful Web Servicesプロジェクトのエクスポート


両方のアイテムをエクスポートし、2つのwarファイルを生成します:CXFRestWithoutSpring.warとCXFRestWithSpring.war.

4.4.2 RESTful Web Servicesの配備


前のステップでエクスポートした2つのwarファイルをすべてTomcatのwebappsディレクトリにコピーし、Tomcatサービスを再起動すればいいです.

4.4.3 RESTful Web Servicesのテスト


IEを使用してテストすることができます.4.1.9と4.2.10を参照してください.

4.5 CXFクライアント開発


クライアント開発の一般的な手順:
第一歩:RESTfulとの接続を確立し、一般的にHttpURLConnectionまたはHttpClientを通過する.
ステップ2:HTTP要求属性を設定する.例えば:HTTP要求方法、リソースタイプ、HTTPヘッダ情報など.
ステップ3:HTTP修正要求情報を提出し、GET方法は不要.
ステップ4:HTTP返却情報、エラーまたは正常返却を取得する.
ステップ5:戻り情報を処理します.
ステップ6:接続リクエストを閉じます.

4.5.1 Javaプロジェクトの新規作成


一般的なJavaプロジェクトを作成します.プロジェクト名:CXFRestClient.もちろん動的Webプロジェクトでも可能ですが、ここでは便宜上Javaプロジェクトを作成するだけです

4.5.2 GETメソッド呼び出しRESTfulサービス


GetStudentClient.JAvaの内容は以下の通りです.
package com.study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
// CXF JAX-RS client Invoking GET Method
public class GetStudentClient {
  public static void main(String[] args) {
    try {
      URL url = new URL("http://localhost:8080/CXFRestWithoutSpring/rest/Students/getName");
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setDoOutput(true);
      conn.setRequestMethod("GET");
      conn.setRequestProperty("Content-Type", "application/xml");
      Scanner scanner;
      String response;
      if (conn.getResponseCode() != 200) {
        scanner = new Scanner(conn.getErrorStream());
        response = "Error From Server 

"; } else { scanner = new Scanner(conn.getInputStream()); response = "Response From Server

"; } scanner.useDelimiter("\\Z"); System.out.println(response + scanner.next()); scanner.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

4.5.3 POSTメソッド呼び出しRESTfulサービス


PostStudentClient.JAvaの内容は以下の通りです.

4.5.4クライアントテスト


直接GetStudentClient.JAvaまたはPostStudentClient.JAvaファイルを右クリックすると、Run As->Javaアプリケーションが表示されます.