日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache cxf JaxRs基本应用

發布時間:2025/3/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache cxf JaxRs基本应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在前一篇中,我們完成了《Apache cxf JaxWs基本應用》 的編寫,我們現在實現一個Restful風格的Cxf 。

一、我們首先依舊是基于Maven project配置pom.xml的依賴

[html] view plaincopyprint?

  • <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??

  • ????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">??

  • ????<modelVersion>4.0.0</modelVersion>??

  • ????<artifactId>abc-api</artifactId>??

  • ????<packaging>war</packaging>??

  • ????<version>${global.version}</version>??

  • ??????

  • ????<parent>??

  • ????????<groupId>com.abc.module</groupId>??

  • ????????<artifactId>abc-parent</artifactId>??

  • ????????<version>0.0.1-SNAPSHOT</version>??

  • ????</parent>??

  • ??????

  • ????<dependencies>??

  • ????????<dependency>??

  • ????????????<groupId>javax.ws.rs</groupId>??

  • ????????????<artifactId>jsr311-api</artifactId>??

  • ????????????<version>1.1.1</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.apache.cxf</groupId>??

  • ????????????<artifactId>cxf-rt-transports-http</artifactId>??

  • ????????????<version>2.6.1</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.apache.cxf</groupId>??

  • ????????????<artifactId>cxf-rt-frontend-jaxws</artifactId>??

  • ????????????<version>2.6.1</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.apache.cxf</groupId>??

  • ????????????<artifactId>cxf-rt-frontend-jaxrs</artifactId>??

  • ????????????<version>2.6.1</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.codehaus.jettison</groupId>??

  • ????????????<artifactId>jettison</artifactId>??

  • ????????????<version>1.3.5</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>axis</groupId>??

  • ????????????<artifactId>axis</artifactId>??

  • ????????????<version>1.4</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.codehaus.woodstox</groupId>??

  • ????????????<artifactId>stax2-api</artifactId>??

  • ????????????<version>3.1.1</version>??

  • ????????</dependency>??

  • ????????<dependency>??

  • ????????????<groupId>org.jbarcode</groupId>??

  • ????????????<artifactId>jbarcode</artifactId>??

  • ????????????<version>0.2.8</version>??

  • ????????</dependency>??

  • ????</dependencies>??

  • ??

  • ????<build>??

  • ????????<finalName>${project.artifactId}</finalName>??

  • ????</build>??

  • </project>??


  • 二、配置web.xml

    [html] view plaincopyprint?

  • <?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"??

  • ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"??

  • ????id="WebApp_ID"?version="2.5">??

  • ????<display-name>fsp-api</display-name>??

  • ????<context-param>??

  • ????????<param-name>contextConfigLocation</param-name>??

  • ????????<param-value>classpath*:application.xml</param-value>??

  • ????</context-param>??

  • ??

  • ????<!--?spring?context?listener?-->??

  • ????<listener>??

  • ????????<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>??

  • ????</listener>??

  • ????<listener>??

  • ????????<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>??

  • ????</listener>??

  • ??

  • ????<!--?CXF?-->??

  • ????<servlet>??

  • ????????<servlet-name>cxf</servlet-name>??

  • ????????<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>??

  • ????????<load-on-startup>1</load-on-startup>??

  • ????</servlet>??

  • ????<servlet-mapping>??

  • ????????<servlet-name>cxf</servlet-name>??

  • ????????<url-pattern>/services/*</url-pattern>??

  • ????</servlet-mapping>??

  • ??????

  • </web-app>??


  • 三、創建Webservice對外接口

    [java] view plaincopyprint?

  • /**?

  • ?*?Copyright?(c)?2011-2014?All?Rights?Reserved.?

  • ?*/??

  • package?com.abc.warehouse.service;??

  • ??

  • import?javax.servlet.http.HttpServletRequest;??

  • import?javax.servlet.http.HttpServletResponse;??

  • import?javax.ws.rs.GET;??

  • import?javax.ws.rs.POST;??

  • import?javax.ws.rs.Path;??

  • import?javax.ws.rs.PathParam;??

  • import?javax.ws.rs.Produces;??

  • import?javax.ws.rs.core.Context;??

  • import?javax.ws.rs.core.MediaType;??

  • ??

  • @Path ("/logisticsApi")??

  • public?interface?ILogisticsApi?{??

  • ??

  • ????@GET ??

  • ????@Path ("/doGet/{first}/{last}")??

  • ????@Produces(MediaType.APPLICATION_XML)??

  • ????public?String?doGet(@PathParam(value?=?"first")?String?firstName,?@PathParam(value?=?"last")?String?lastName);??

  • ??????

  • ??????

  • ????@POST??

  • ????@Path("/itemConfirm")??

  • ????@Produces(MediaType.APPLICATION_XML)??

  • ????public?String?itemConfirm(String?xmlParam,??

  • ????????????????????????????????????@Context?HttpServletRequest?servletRequest,???

  • ????????????????????????????????????@Context?HttpServletResponse?servletResponse);??

  • ??

  • }??


  • 四、實現Webservice接口

    [java] view plaincopyprint?

  • /**?

  • ?*?Copyright?(c)?2011-2014?All?Rights?Reserved.?

  • ?*/??

  • package?com.abc.api.service;??

  • ??

  • import?javax.servlet.http.HttpServletRequest;??

  • import?javax.servlet.http.HttpServletResponse;??

  • ??

  • import?org.slf4j.Logger;??

  • import?org.slf4j.LoggerFactory;??

  • ??

  • import?com.abc.warehouse.service.ILogisticsApi;??

  • ??

  • ??

  • public?class?LogisticsApiImpl?implements?ILogisticsApi?{??

  • ??

  • ????private?Logger?log?=?LoggerFactory.getLogger(getClass());??

  • ??????

  • ????/**??

  • ?????*?@see?com.abc.warehouse.service.ILogisticsApi#itemConfirm(java.lang.String,?javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)?

  • ?????*/??

  • ????@Override??

  • ????public?String?itemConfirm(String?xmlParam,??

  • ????????????????????????????????????HttpServletRequest?servletRequest,???

  • ????????????????????????????????????HttpServletResponse?servletResponse)?{??

  • ????????//?TODO?Auto-generated?method?stub??

  • ????????//?to?do?something?...??

  • ??

  • ????????return?response;??

  • ????}??

  • ??

  • ??

  • ????/**??

  • ?????*?@see?com.abc.warehouse.service.ILogisticsApi#doGet(java.lang.String,?java.lang.String)?

  • ?????*/??

  • ????@Override??

  • ????public?String?doGet(String?firstName,?String?lastName)?{??

  • ????????//?TODO?Auto-generated?method?stub??

  • ????????log.debug("doGet?:?"?+?firstName?+?",?lastName?:?"?+?lastName);??

  • ????????//?to?to?something?...??

  • ??

  • ????????return?response;??

  • ????}??

  • ??

  • ??

  • ??

  • }??


  • 五、配置Spring xml,讓Webservice提供服務

    [html] view plaincopyprint?

  • <?xml?version="1.0"?encoding="UTF-8"?>??

  • <beans?xmlns="http://www.springframework.org/schema/beans"??

  • ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"???

  • ????xmlns:jaxws="http://cxf.apache.org/jaxws"??

  • ????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/jaxws?http://cxf.apache.org/schemas/jaxws.xsd??

  • ????????????????????http://cxf.apache.org/jaxrs??

  • ????????????????????http://cxf.apache.org/schemas/jaxrs.xsd">??

  • ??

  • ????<import?resource="classpath:META-INF/cxf/cxf.xml"?/>??

  • ????<import?resource="classpath:META-INF/cxf/cxf-extension-soap.xml"?/>??

  • ????<import?resource="classpath:META-INF/cxf/cxf-servlet.xml"?/>??

  • ??

  • ????<bean?id="encodingLoggingInInterceptor"?class="com.abc.api.util.EncodingLoggingInInterceptor"/>??

  • ????<bean?id="outLoggingInterceptor"?class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>??

  • ????<bean?id="logisticsApi"?class="com.abc.api.service.LogisticsApiImpl"/>??

  • ????<jaxrs:server?id="logisticsApiServiceContainer">??

  • ????????<jaxrs:serviceBeans>??

  • ????????????<ref?bean="logisticsApi"?/>??

  • ????????</jaxrs:serviceBeans>??

  • ??????????

  • ????????<jaxrs:inInterceptors>??

  • ????????????<ref?bean="encodingLoggingInInterceptor"/>??

  • ????????</jaxrs:inInterceptors>??

  • ????????<jaxrs:outInterceptors>??

  • ????????????<ref?bean="outLoggingInterceptor"/>??

  • ????????</jaxrs:outInterceptors>??

  • ??????????

  • ????????<jaxrs:extensionMappings>??

  • ????????????<!--?<entry?key="json"?value="application/json"?/>?-->??

  • ????????????<entry?key="xml"?value="application/xml"?/>??

  • ????????</jaxrs:extensionMappings>??

  • ??????

  • ????????<jaxrs:languageMappings>??

  • ????????????<entry?key="en"?value="en-gb"/>????

  • ????????</jaxrs:languageMappings>??

  • ????</jaxrs:server>??

  • ??

  • </beans>??


  • 其中EncodingLoggingInInterceptor類主要是為了解決傳輸內容在LoggingInInterceptor類內構建并輸出時的亂碼問題

    [java] view plaincopyprint?

  • /**?

  • ?*?Copyright?(c)?2011-2014?All?Rights?Reserved.?

  • ?*/??

  • package?com.abc.api.util;??

  • ??

  • import?org.apache.cxf.interceptor.Fault;??

  • import?org.apache.cxf.interceptor.LoggingInInterceptor;??

  • import?org.apache.cxf.message.Message;??

  • import?org.slf4j.Logger;??

  • import?org.slf4j.LoggerFactory;??

  • ??

  • ??

  • public?class?EncodingLoggingInInterceptor?extends?LoggingInInterceptor?{??

  • ??

  • ????private?Logger?log?=?LoggerFactory.getLogger(getClass());??

  • ??????

  • ????/**?

  • ?????*??

  • ?????*/??

  • ????public?EncodingLoggingInInterceptor()?{??

  • ????????//?TODO?Auto-generated?constructor?stub??

  • ????????super();??

  • ????}??

  • ??????

  • ????/**??

  • ?????*?@see?org.apache.cxf.interceptor.LoggingInInterceptor#handleMessage(org.apache.cxf.message.Message)?

  • ?????*/??

  • ????@Override??

  • ????public?void?handleMessage(Message?message)?throws?Fault?{??

  • ????????//?TODO?Auto-generated?method?stub??

  • ??????????

  • ????????String?encoding?=?System.getProperty("file.encoding");??

  • ????????encoding?=?encoding?==?null?||?encoding.equals("")???"UTF-8"?:?encoding;??

  • ??????????

  • ????????log.debug("encoding?:?"?+?encoding);??

  • ????????message.put(Message.ENCODING,?encoding);??

  • ??????????

  • ????????super.handleMessage(message);??

  • ????}??

  • }??

  • 至此,Webservice服務器端代碼已經編寫完成,假設Maven project名字為abc-api,那么訪問該Webservice接口的地址為:http://ip:port/abc-api/services/


    六、接下來我們編寫一個基于WebClient簡單客戶端

    [java] view plaincopyprint?

  • /**?

  • ?*?Copyright?(c)?2011-2014?All?Rights?Reserved.?

  • ?*/??

  • package?com.abc.api.service;??

  • ??

  • import?static?org.junit.Assert.*;??

  • ??

  • import?javax.ws.rs.core.MediaType;??

  • ??

  • import?org.apache.cxf.jaxrs.client.WebClient;??

  • import?org.junit.After;??

  • import?org.junit.Before;??

  • import?org.junit.Test;??

  • ??

  • ??

  • public?class?LogisticsApiTester?{??

  • ??

  • ????private?WebClient?client;??

  • ????private?String?baseAddress?=?"http://localhost:8080/abc-api/services/logisticsApi";??

  • ????/**?

  • ?????*??

  • ?????*?@throws?java.lang.Exception?

  • ?????*/??

  • ????@Before??

  • ????public?void?setUp()?throws?Exception?{??

  • ????????client?=?WebClient.create(baseAddress)??

  • ????????????.header("charset",?"UTF-8")??

  • ????????????.encoding("UTF-8")??

  • ????????????.acceptEncoding("UTF-8");??

  • ????}??

  • ??

  • ????/**?

  • ?????*??

  • ?????*?@throws?java.lang.Exception?

  • ?????*/??

  • ????@After??

  • ????public?void?tearDown()?throws?Exception?{??

  • ????????client?=?null;??

  • ????}??

  • ??

  • ????/**?

  • ?????*?Test?method?for?{@link?com.abc.api.service.LogisticsApiImpl#itemConfirm(java.lang.String,?javax.servlet.http.HttpServletRequest,?javax.servlet.http.HttpServletResponse)}.?

  • ?????*/??

  • ????@Test??

  • ????public?void?testItemConfirm()?{??

  • ????????//fail("Not?yet?implemented");??

  • ??????????

  • ????????Object?xmlParam?=?"<?xml?version=\"1.0\"?encoding=\"UTF-8\"?>"??

  • ????????????+?"<itemName>諾基亞</itemName>";??

  • ????????String?responseMessage?=?client.path("itemConfirm")??

  • ????????????????????????????????????????.accept(MediaType.APPLICATION_XML)??

  • ????????????????????????????????????????.post(xmlParam,?String.class);??

  • ????????System.out.println("responseMessage?:?"?+?responseMessage);??

  • ????????assertNotEquals(responseMessage,?null);??

  • ????}??

  • ??

  • ????/**?

  • ?????*?Test?method?for?{@link?com.abc.api.service.LogisticsApiImpl#doGet(java.lang.String,?java.lang.String)}.?

  • ?????*/??

  • ????@Test??

  • ????public?void?testDoGet()?{??

  • ????????//fail("Not?yet?implemented");??

  • ??????????

  • ????????String?responseString?=?client.path("doGet/{first}/{last}",?1,?2)??

  • ????????????????????????????????????.accept(MediaType.APPLICATION_XML)??

  • ????????????????????????????????????.get(String.class);??

  • ????????assertNotEquals(responseString,?null);??

  • ????}??

  • ??

  • ??

  • }??



  • 到這里我們就完成了基于Apache cxf JaxRs的服務端和客戶端的Demo編寫。



    轉載于:https://my.oschina.net/sniperLi/blog/505471

    總結

    以上是生活随笔為你收集整理的Apache cxf JaxRs基本应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。