WebServiceベース入門CXF(WS+RS)
36295 ワード
一、基本的な紹介
Web Servicesは、ネットワーク上で標準化されたXMLメッセージングによってアクセスできる一連の動作を記述するソフトウェアインタフェースです.XML言語ベースのプロトコルを使用して、実行する操作または別のWebサービスと交換するデータを記述します.Web Servicesの多くは、特定のテクノロジーではなく標準であり、異なるプラットフォーム、言語の多くはWeb Servicesの開発を実現しています.Java分野では、Axis、xfire、CXFなど、Web Servicesのフレームワークが多い.
二、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サービスのパブリケーションと使用を簡単に実現できます.Apache CXFはオープンソースのServicesフレームワークで、CXFはFrontendプログラミングAPIを使用してJAX-WSのようなServicesの構築と開発を支援します.これらのServicesは、SOAP、XML/HTTP、RESTful HTTP、CORBAなど、さまざまなプロトコルをサポートし、HTTP、JMS、JBIなど、さまざまな転送プロトコルで実行できます.CXFは、Servicesの作成を大幅に簡素化し、XFireの伝統を継承し、Springとシームレスに統合することができます.CXF WebServiceの開発は、主に2つのサービス提供方式WS、RSに分かれている.ここでは,この2つの方式の独立したパブリケーション方法とSpringと統合したパブリケーション方法をそれぞれ紹介する.
三、CXF-WS開発入門
1、JAX-WS独立サービス使用
JAX-WSはデータを伝送し、XML形式であり、SOAPプロトコルに基づいている.開発手順:
1.簡単なMavenプロジェクトを作成します.
2.次の構成により、重要座標依存性を導入します.最初の座標はcxfアプリケーションを開発するために使用され、2番目の座標は1つのサーバを構築し、独立してcxfアプリケーションを実行することができ、このサーバは独立したtomcaプラグインサーバに似ている. の3番目の座標はログ出力のjar依存であり、この依存を設定すると、プロジェクトの実行中に詳細なデータ伝達のログ情報を印刷することができる.ただし、log 4 j.propertiesプロファイルをプロジェクトルートディレクトリにコピーすることは忘れられません. 3.サービス・エンド・プログラムを作成し、エンティティー・クラスを作成します.
Userケースエンティティークラス:
実装クラスコード実装:
4.サービスパブリケーション、サービスパブリケーションコードの作成.
5.クライアントプログラムコードを作成し、通信を実現する.関連依存、すなわち依存jarパケットを構成する. は、データを伝達するキャリアであるエンティティクラスを記述する. サービス側のインタフェースを記述する. サービス側インタフェースの実装クラスを記述する. サービスパブリケーションのアプリケーションを記述する. は、サードパーティにアクセスパスを提供し、サードパーティがクライアントを記述してデータの通信を実現する. JAX-WS原理分析:クライアントはjaxWsProxyFactoryBeanオブジェクトを作成します.これはサービス側実装クラスのエージェントオブジェクトの作成工場です.create()メソッドでサービス側実装クラスのエージェントオブジェクトを作成できます.このオブジェクトはインタフェースに@WebMethodを追加したメソッドをすべて呼び出すことができます.そのタイプはインタフェースのタイプです.サービス側実装クラスオブジェクトの兄弟オブジェクトに相当し、完全なWebサービスアプリケーションが完了します.
2、JAX-WSとSpringを統合してWebサービスを開発する
第一歩:tomcatに基づいてサービスを公開するmaven webプロジェクトを構築します.
ステップ2:Maven座標をインポートし、依存関係を確立します.
5.アプリケーションContext.xmlでサービスを構成します.このサービスはspringに渡されて管理されます.
6.tomcatプラグインを使用してmavenプロジェクトを起動し、サードパーティへのアクセスパスを提供する:http://localhost:9998/cxf_ws_spring/service/userService?wsdl.
注意:特にアクセスパスの接続の問題に注意してください.tomcatアクセスパス+プロジェクト名+web.xml構成のアクセスパス+サービス名、後にパラメータwsdlを接続します.
7.springを統合し、クライアントを構成し、クライアントはspringに渡して管理する.
8.テストケースを作成します.
1、JAX-RS独立サービス使用
1.簡単なMaven javaプロジェクトを作成します.
2.Maven座標をインポートします.
Userクラス:
4.業務インタフェースと業務実現クラスを作成する.
ビジネスインタフェース:@Pathは、クラス上のpath+メソッド上のpathであるサービスアクセスリソースパスを指定します. @Consumesは、クライアントから伝達されたデータフォーマットを処理できること、すなわちクライアントから伝達されたデータフォーマットを指定する. @Producesは、クライアントに返すフォーマットデータを生成できるかどうかを指定します. @GET照会@PUT修正@POST増加@DELETE削除; @PathParam(「id」)は、アクセスパスに接続するパラメータを指定します.ビジネス実装クラス:
6.クライアントを作成します.
クライアント・プログラムの作成には2つの方法があります. httpクライアントツールを使用するには、HTTPプロトコルの内容をカスタマイズして解析する必要があります. WebClientツールクラス使用(CXF付属)2つ目は、cxf-rt-rs-client依存をインポートする必要があります.依存: createは、アクセスアドレス を与える接続を作成する. acceptは、指定されたタイプのデータを受信するが、このタイプは、サービスインタフェースで指定された戻りデータ型 でなければならない. getCollectionはすべてのオブジェクトを取得する方法であり、1つのオブジェクトであればgetであり、これは実際によって と決定される. typeは、サービス側インタフェースによって定義受信データ型 である必要がある送信データのフォーマットである.
考え:
どのようにJSONデータフォーマットでインタラクションを行いますか?JSONデータをインタラクションするには,2つの依存を導入する必要がある.そうでないとエラーが発生します:Caused by:javax.ws.rs.ProcessingException:No message body writer has been found for class cn.itcast.cxf.domain.User,ContentType:アプリケーション/jsonがインポートする必要がある依存は次のとおりです.
1.Maven Webプロジェクトを作成します.
2.依存関係をインポートします.
5.アプリケーションContext.xmlの構成
xmlns:jaxrs="http://cxf.apache.org/jaxrs"http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
6.サービスを開始し、パスにアクセスします.
アクセスパス:サーバールートアドレス(プロジェクトアドレス)+web.xml構成+アプリケーションContext.xml address構成(またはクラス@Path)+メソッド@Path
7.クライアントを作成します.
Web Servicesは、ネットワーク上で標準化されたXMLメッセージングによってアクセスできる一連の動作を記述するソフトウェアインタフェースです.XML言語ベースのプロトコルを使用して、実行する操作または別のWebサービスと交換するデータを記述します.Web Servicesの多くは、特定のテクノロジーではなく標準であり、異なるプラットフォーム、言語の多くはWeb Servicesの開発を実現しています.Java分野では、Axis、xfire、CXFなど、Web Servicesのフレームワークが多い.
二、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サービスのパブリケーションと使用を簡単に実現できます.Apache CXFはオープンソースのServicesフレームワークで、CXFはFrontendプログラミングAPIを使用してJAX-WSのようなServicesの構築と開発を支援します.これらのServicesは、SOAP、XML/HTTP、RESTful HTTP、CORBAなど、さまざまなプロトコルをサポートし、HTTP、JMS、JBIなど、さまざまな転送プロトコルで実行できます.CXFは、Servicesの作成を大幅に簡素化し、XFireの伝統を継承し、Springとシームレスに統合することができます.CXF WebServiceの開発は、主に2つのサービス提供方式WS、RSに分かれている.ここでは,この2つの方式の独立したパブリケーション方法とSpringと統合したパブリケーション方法をそれぞれ紹介する.
三、CXF-WS開発入門
1、JAX-WS独立サービス使用
JAX-WSはデータを伝送し、XML形式であり、SOAPプロトコルに基づいている.開発手順:
1.簡単なMavenプロジェクトを作成します.
2.次の構成により、重要座標依存性を導入します.
4.0.0
cn.leon.maven
cxf_ws_first_application
0.0.1-SNAPSHOT
cxf_ws_first_application
CXF-WS java
org.apache.cxf
cxf-rt-frontend-jaxws
3.0.1
org.apache.cxf
cxf-rt-transports-http-jetty
3.0.1
org.slf4j
slf4j-log4j12
1.7.12
javax.jws
jsr181
1.0
Userケースエンティティークラス:
package cn.leon.cxf.domain;
import java.util.ArrayList;
import java.util.List;
public class User {
private Integer id;
private String username;
private String city;
private List cars = new ArrayList();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public List getCars() {
return cars;
}
public void setCars(List cars) {
this.cars = cars;
}
}
Carケースエンティティークラス:package cn.leon.cxf.domain;
public class Car {
private Integer id;
private String name;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
サービス側プログラム:サービスポートインタフェースプログラム、これは対外的に発表されたインタフェースで、必ず、具体的なコード業務の実現、その実現クラスが完成しなければならない.インタフェースコードは次のとおりです.package cn.leon.cxf.service;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import cn.leoncxf.domain.Car;
import cn.leon.cxf.domain.User;
/**
* , 。
* @author lemon
*
*/
@WebService // , WebService
public interface IUserService {
@WebMethod // , WebService
String sayHello(String name);
@WebMethod
List findCarByUser(User user);
}
注記:@WebService:クラスの上に使用され、タグクラスはWebServiceサービス提供オブジェクトです.@WebMethod:メソッドの上に使用します.タグメソッドはWebServiceサービス提供メソッドです.実装クラスコード実装:
package cn.leon.cxf.service;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import cn.leon.cxf.domain.Car;
import cn.leon.cxf.domain.User;
@WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
// endPointInterface , servicename
public class UserServiceImpl implements IUserService {
//
public String sayHello(String name) {
return "Hello " + name;
}
//
public List findCarByUser(User user) {
List list = null;
if ("tom".equals(user.getUsername())) {
list = new ArrayList();
Car car = new Car();
car.setId(1);
car.setName("QQ ");
car.setPrice(10000D);
list.add(car);
}
return list;
}
}
注記パラメータの説明:endpointInterface:インタフェースサービスの完全なクラス名;ServiceName:サービス名.4.サービスパブリケーション、サービスパブリケーションコードの作成.
package cn.leon.cxf.ws.server;
import javax.xml.ws.Endpoint;
import cn.itcast.cxf.service.IUserService;
import cn.itcast.cxf.service.UserServiceImpl;
/**
* CXF UserService
* @author lemon
*
*/
public class WS_Server {
public static void main(String[] args) {
// 1.
IUserService userService = new UserServiceImpl();
// 2.
String address = "http://localhost:9999/userService";
// 3.
Endpoint.publish(address, userService);
System.out.println(" ....");
}
}
サービス・アドレス:http://localhost:9999/userService?wsdlブラウザ上でこのアドレスにアクセスし,データへのアクセスを実現できるが,ブラウザからパラメータを渡すことができないため,サービスに対するメソッドの呼び出しを完了できない.5.クライアントプログラムコードを作成し、通信を実現する.
package cn.leon.cxf.ws.client;
import java.util.List;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import cn.leon.cxf.domain.Car;
import cn.leon.cxf.domain.User;
import cn.leon.cxf.service.IUserService;
public class WS_Client {
public static void main(String[] args) {
// , WebService
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");
jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
// ,
jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
//
IUserService proxy = (IUserService) jaxWsProxyFactoryBean.create();
//
System.out.println(proxy.sayHello("ITCAST"));
User user = new User();
user.setUsername("tom");
List cars = proxy.findCarByUser(user);
for (Car car : cars) {
System.out.println(car);
}
}
}
これは独立して発表されたJAX-WSの完全な流れであり、以下にまとめられる.2、JAX-WSとSpringを統合してWebサービスを開発する
第一歩:tomcatに基づいてサービスを公開するmaven webプロジェクトを構築します.
ステップ2:Maven座標をインポートし、依存関係を確立します.
4.0.0
cn.leon.maven
cxf_ws_spring
0.0.1-SNAPSHOT
war
cxf_ws_spring
CXF WS Spring
org.apache.cxf
cxf-rt-frontend-jaxws
3.0.1
org.springframework
spring-context
4.1.7.RELEASE
org.springframework
spring-web
4.1.7.RELEASE
org.springframework
spring-test
4.1.7.RELEASE
junit
junit
4.12
javax.servlet
javax.servlet-api
3.0.1
test
org.codehaus.mojo
tomcat-maven-plugin
1.1
9998
3.web.xmlの構成
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
CXFService
org.apache.cxf.transport.servlet.CXFServlet
1
CXFService
/service/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
4.既存のエンティティークラス、インタフェース、およびサービスインプリメンテーションクラスをインポートします.5.アプリケーションContext.xmlでサービスを構成します.このサービスはspringに渡されて管理されます.
jaxwsネーミングスペースと制約を導入する必要があることに注意してください.xmlns:jaxws="http://cxf.apache.org/jaxws"6.tomcatプラグインを使用してmavenプロジェクトを起動し、サードパーティへのアクセスパスを提供する:http://localhost:9998/cxf_ws_spring/service/userService?wsdl.
注意:特にアクセスパスの接続の問題に注意してください.tomcatアクセスパス+プロジェクト名+web.xml構成のアクセスパス+サービス名、後にパラメータwsdlを接続します.
7.springを統合し、クライアントを構成し、クライアントはspringに渡して管理する.
メッセージ・ブロッカーはオプションです.8.テストケースを作成します.
package cn.leon.cxf.server.test;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.leon.cxf.domain.Car;
import cn.leon.cxf.domain.User;
import cn.leon.cxf.service.IUserService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class CXFTest {
//
@Autowired
private IUserService proxy;
@Test
public void testServer() {
System.out.println(proxy.sayHello(" "));
}
@Test
public void testServer2() {
User user = new User();
user.setUsername("tom");
List cars = proxy.findCarByUser(user);
for (Car car : cars) {
System.out.println(car);
}
}
}
四、CXF-RS開発入門(重点)1、JAX-RS独立サービス使用
1.簡単なMaven javaプロジェクトを作成します.
2.Maven座標をインポートします.
4.0.0
cn.leon.maven
cxf_rs_first_application
0.0.1-SNAPSHOT
cxf_rs_first_application
jax-rs
org.apache.cxf
cxf-rt-frontend-jaxrs
3.0.1
org.apache.cxf
cxf-rt-transports-http-jetty
3.0.1
org.slf4j
slf4j-log4j12
1.7.12
org.apache.cxf
cxf-rt-rs-client
3.0.1
org.apache.cxf
cxf-rt-rs-extension-providers
3.0.1
org.codehaus.jettison
jettison
1.3.7
3.エンティティークラスを作成します.Userクラス:
package cn.leon.cxf.domain;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "User")
public class User {
private Integer id;
private String username;
private String city;
private List cars = new ArrayList();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public List getCars() {
return cars;
}
public void setCars(List cars) {
this.cars = cars;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", city=" + city + ", cars=" + cars + "]";
}
}
Car類:package cn.itcast.cxf.domain;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Car")
public class Car {
private Integer id;
private String name;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [id=" + id + ", name=" + name + ", price=" + price + "]";
}
}
注意:@XmlRootElement(name="Car")は、xmlとjsonに変換するときのオブジェクトの名前を指定します.4.業務インタフェースと業務実現クラスを作成する.
ビジネスインタフェース:
package cn.leon.cxf.service;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import cn.leon.cxf.domain.User;
@Path("/userService")
@Produces("*/*")
public interface IUserService {
@POST
@Path("/user") //
@Consumes({ "application/xml", "application/json" }) //
void saveUser(User user);
@PUT
@Path("/user")
@Consumes({ "application/xml", "application/json" })
void updateUser(User user);
@GET
@Path("/user")
@Consumes({ "application/xml", "application/json" })
@Produces({ "application/xml", "application/json" }) //
List findAll();
@GET
@Path("/user/{id}")
@Consumes({ "application/xml", "application/json" })
@Produces({ "application/xml", "application/json" })
User findUserById(@PathParam("id") Integer id); //
@DELETE
@Path("/user/{id}")
@Consumes({ "application/xml", "application/json" })
void deleteUserById(@PathParam("id") Integer id);
}
説明:package cn.leon.cxf.service;
import java.util.ArrayList;
import java.util.List;
import cn.leon.cxf.domain.Car;
import cn.leon.cxf.domain.User;
public class UserServiceImpl implements IUserService {
public void saveUser(User user) {
System.out.println("save user:" + user);
}
public void updateUser(User user) {
System.out.println("update user:" + user);
}
public List findAll() {
List users = new ArrayList();
User user1 = new User();
user1.setId(1);
user1.setUsername(" ");
user1.setCity(" ");
List carList1 = new ArrayList();
Car car1 = new Car();
car1.setId(101);
car1.setName(" ");
car1.setPrice(1000000d);
carList1.add(car1);
Car car2 = new Car();
car2.setId(102);
car2.setName(" ");
car2.setPrice(400000d);
carList1.add(car2);
user1.setCars(carList1);
users.add(user1);
User user2 = new User();
user2.setId(2);
user2.setUsername(" ");
user2.setCity(" ");
users.add(user2);
return users;
}
public User findUserById(Integer id) {
if (id == 1) {
System.out.println(22222);
User user1 = new User();
user1.setId(1);
user1.setUsername(" ");
user1.setCity(" ");
return user1;
}
return null;
}
public void deleteUserById(Integer id) {
System.out.println("delete user id :" + id);
}
}
5.リリースサービスpackage cn.leon.cxf.server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import cn.leon.cxf.domain.Car;
import cn.leon..cxf.domain.User;
import cn.leon.cxf.service.IUserService;
import cn.leon.cxf.service.UserServiceImpl;
public class RSServer {
public static void main(String[] args) {
//
IUserService userService = new UserServiceImpl();
//
JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
jaxrsServerFactoryBean.setResourceClasses(User.class, Car.class); // xml、json
jaxrsServerFactoryBean.setAddress("http://localhost:9997");
jaxrsServerFactoryBean.setServiceBean(userService);
//
jaxrsServerFactoryBean.create();
System.out.println(" ....");
}
}
ブラウザからサービス側へのデータアクセスが可能になりました.6.クライアントを作成します.
クライアント・プログラムの作成には2つの方法があります.
org.apache.cxf
cxf-rt-rs-client
3.0.1
クライアント作成:package cn.leon.cxf.client;
import java.util.Collection;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
import cn.leon.cxf.domain.User;
public class RSClient {
public static void main(String[] args) {
// :
// create ,
// accept ,
// getCollection , , get,
// type ,
Collection extends User> collection = WebClient.create("http://localhost:9997/userService/user")
.accept(MediaType.APPLICATION_XML).getCollection(User.class);
System.out.println(collection);
//
User user = new User();
user.setUsername("Lemon");
WebClient.create("http://localhost:9997/userService/user")
.type(MediaType.APPLICATION_XML).post(user);
}
}
メソッドの説明:考え:
どのようにJSONデータフォーマットでインタラクションを行いますか?JSONデータをインタラクションするには,2つの依存を導入する必要がある.そうでないとエラーが発生します:Caused by:javax.ws.rs.ProcessingException:No message body writer has been found for class cn.itcast.cxf.domain.User,ContentType:アプリケーション/jsonがインポートする必要がある依存は次のとおりです.
org.apache.cxf
cxf-rt-rs-extension-providers
3.0.1
org.codehaus.jettison
jettison
1.3.7
JSONデータを使用して対話するクライアント:package cn.leon.cxf.client;
import java.util.Collection;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
import cn.leon.cxf.domain.User;
public class RSClient2 {
public static void main(String[] args) {
// :
// create ,
// accept ,
// getCollection , , get,
// type ,
Collection extends User> collection = WebClient.create("http://localhost:9997/userService/user")
.accept(MediaType.APPLICATION_JSON).getCollection(User.class);
System.out.println(collection);
//
User user = new User();
user.setUsername("Lemon");
WebClient.create("http://localhost:9997/userService/user")
.type(MediaType.APPLICATION_JSON).post(user);
}
}
2、JAX-RSとSpringを統合してWebサービスを開発する1.Maven Webプロジェクトを作成します.
2.依存関係をインポートします.
4.0.0
cn.leon.maven
cxf_rs_spring
0.0.1-SNAPSHOT
war
cxf_rs_spring
CXF rs spring
org.apache.cxf
cxf-rt-frontend-jaxrs
3.0.1
org.slf4j
slf4j-log4j12
1.7.12
org.apache.cxf
cxf-rt-rs-client
3.0.1
org.apache.cxf
cxf-rt-rs-extension-providers
3.0.1
org.codehaus.jettison
jettison
1.3.7
org.springframework
spring-context
4.1.7.RELEASE
org.springframework
spring-web
4.1.7.RELEASE
org.springframework
spring-test
4.1.7.RELEASE
junit
junit
4.12
org.codehaus.mojo
tomcat-maven-plugin
1.1
9996
ステップ3:3.web.xmlのインポート
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
CXFService
org.apache.cxf.transport.servlet.CXFServlet
1
CXFService
/service/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
4.上記のエンティティークラスとサービスインタフェース、サービス実装クラスをインポートします.サービスインタフェースの@Pathは削除する必要があるか、アプリケーションContext.xmlの送信アクセスアドレスを空に設定する必要があることに注意してください.@PathはアプリケーションContext.xmlの構成と重複しているので一般的にはコメントしますが、xmlの構成を空にすることをお勧めします.ここでpathの設定は空ではありません.xmlではインタフェースの複数の実装クラスを構成することができるので、xmlで統一的なアクセスパスを設定すると、どの実装クラスが働いているのか、クラスに@pathを設定しているのかを区別することが難しくなります.では,異なる実装クラスを区別できることが明らかになった.5.アプリケーションContext.xmlの構成
名前空間を導入する必要があることに注意してください.xmlns:jaxrs="http://cxf.apache.org/jaxrs"http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
6.サービスを開始し、パスにアクセスします.
アクセスパス:サーバールートアドレス(プロジェクトアドレス)+web.xml構成+アプリケーションContext.xml address構成(またはクラス@Path)+メソッド@Path
7.クライアントを作成します.
package cn.leon.cxf.client;
import java.util.Collection;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.client.WebClient;
import cn.leon.cxf.domain.User;
public class RSClient {
public static void main(String[] args) {
// :
// create ,
// accept ,
// getCollection , , get,
// type ,
Collection extends User> collection = WebClient.create("http://localhost:9996/cxf_rs_spring/service/userService/user")
.accept(MediaType.APPLICATION_XML).getCollection(User.class);
System.out.println(collection);
//
User user = new User();
user.setUsername("Lemon");
WebClient.create("http://localhost:9996/cxf_rs_spring/service/userService/user")
.type(MediaType.APPLICATION_XML).post(user);
}
}