CXF发布RestFul WebService和SOAP WebService

雨点打透心脏的1/2处 2022-06-14 00:18 382阅读 0赞

#

CXF发布RestFul WebService和SOAP WebService

Apache CXF可以发布多种协议的WebService,Spring支持整合cxf到项目中,可以简化后台构架,以下是一个cxf发布SOAP协议WebService和RestFul WebService的简单例子。

一、添加依赖

  1. <dependency>
  2. <groupId>org.apache.cxf</groupId>
  3. <artifactId>cxf-rt-frontend-jaxws</artifactId>
  4. <version>3.1.11</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.cxf</groupId>
  8. <artifactId>cxf-rt-frontend-jaxrs</artifactId>
  9. <version>3.1.11</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>javax.ws.rs</groupId>
  13. <artifactId>javax.ws.rs-api</artifactId>
  14. <version>2.1-m07</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.codehaus.jackson</groupId>
  18. <artifactId>jackson-jaxrs</artifactId>
  19. <version>1.9.13</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>com.fasterxml.jackson.jaxrs</groupId>
  23. <artifactId>jackson-jaxrs-json-provider</artifactId>
  24. <version>2.9.0.pr3</version>
  25. </dependency>

二、web.xml中添加CXFServlet拦截处理请求

  1. <servlet>
  2. <servlet-name>CXFServlet</servlet-name>
  3. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>CXFServlet</servlet-name>
  8. <url-pattern>/services/*</url-pattern>
  9. </servlet-mapping>

三、开发RestFul风格的WebService

1) RestFul服务接口定义

  1. @Consumes("application/json")
  2. @Produces("application/json")
  3. public interface IStudentService {
  4. /**
  5. *
  6. * @param student
  7. * @param page
  8. * @return
  9. */
  10. @GET
  11. @Path(value = "/findStudentList/{pageSize}/{curPage}")
  12. public List<StudentVO> findStudent(@QueryParam("") StudentVO student, @PathParam("") PageVO page);
  13. /**
  14. *
  15. * @param students
  16. */
  17. @POST
  18. @Path(value = "/addStudent")
  19. @Consumes("application/json")
  20. @Produces("application/json")
  21. public void addStudent(List<StudentVO> students);
  22. }

2) RestFul服务接口实现

  1. @Path("/service")
  2. @Component
  3. public class StudentService implements IStudentService {
  4. @Override
  5. public List<StudentVO> findStudent(StudentVO student, PageVO page) {
  6. List<StudentVO> list = new ArrayList<StudentVO>();
  7. StudentVO s1 = new StudentVO();
  8. s1.setId(1L);
  9. s1.setName("name1");
  10. s1.setNo("090440112");
  11. s1.setGrade(1);
  12. list.add(s1);
  13. return list;
  14. }
  15. @Override
  16. public void addStudent(List<StudentVO> students) {
  17. }
  18. }

3) 发布RestFul服务

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  11. http://www.springframework.org/schema/mvc
  12. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  13. http://www.springframework.org/schema/tx
  14. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  15. http://www.springframework.org/schema/aop
  16. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  17. http://cxf.apache.org/jaxrs
  18. http://cxf.apache.org/schemas/jaxrs.xsd
  19. http://cxf.apache.org/jaxws
  20. http://cxf.apache.org/schemas/jaxws.xsd
  21. ">
  22. <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
  23. <jaxrs:server id="studentRestService" address="/student">
  24. <jaxrs:serviceBeans>
  25. <ref bean="studentService"></ref>
  26. </jaxrs:serviceBeans>
  27. <jaxrs:providers>
  28. <ref bean="jsonProvider"/>
  29. </jaxrs:providers>
  30. </jaxrs:server>
  31. </beans>

4) 调用RestFul服务

Center

四、开发SOAP协议的WebService

1) SOAP服务接口定义

  1. @WebService
  2. public interface ICourseService {
  3. @Path("/findCourseList")
  4. public String findCourseList(String req);
  5. }

2) SOAP服务接口实现

  1. @Component
  2. public class CourseService implements ICourseService {
  3. @Override
  4. public String findCourseList(String req) {
  5. return "course list";
  6. }
  7. }

3) 发布SOPA服务

Spring配置发布如下,也可以使用jaxws:endpoint的方式配置发布服务

  1. <jaxws:server id="courseWsService" serviceClass="com.ttt.server.logistics.security.service.ICourseService" address="/course">
  2. <jaxws:serviceBean>
  3. <ref bean="courseService"/>
  4. </jaxws:serviceBean>
  5. <jaxws:inInterceptors>
  6. <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
  7. </jaxws:inInterceptors>
  8. <jaxws:outInterceptors>
  9. <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
  10. </jaxws:outInterceptors>
  11. </jaxws:server>

4) 调用SOAP服务

Spring中配置Client,通过注入Client到其他Bean中,调用SOAP服务

  1. <jaxws:client id="courseWebService" serviceClass="com.ttt.server.logistics.security.service.ICourseService" address="http://127.0.0.1:8080/ttt.server/services/course">
  2. <jaxws:inInterceptors>
  3. <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
  4. </jaxws:inInterceptors>
  5. <jaxws:outInterceptors>
  6. <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
  7. </jaxws:outInterceptors>
  8. </jaxws:client>

使用JaxWsProxyFactoryBean调用SOAP服务

  1. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  2. factory.setServiceClass(ICourseService.class);
  3. factory.setAddress("http://127.0.0.1:8080/ttt.server/services/course");
  4. ICourseService server = (ICourseService) factory.create();
  5. System.out.println(server.findCourseList("111"));

完。

发表评论

表情:
评论列表 (有 0 条评论,382人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CXF异步WebService发布调用

    最近工作需要接触CXF异步webservice的发布和调用,在网上Google并捣鼓了好一阵子,总算成功了。毕竟这方面的资料比较少,自己总结一下写下这篇博文。本文将描述如何利用