WebService

Posted 司机刹一脚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebService相关的知识,希望对你有一定的参考价值。

WebService CXF  使用入门

  很多个系统,进行分布的部署,分布的系统数据通信 解决技术就是 WebService


CXF WebService 开发,主要分为两种服务提供方式 WS 、RS

  

  JAX-WS 传输数据,就是 XML 格式,基于 SOAP 协议
  JAX-RS 传输数据,传输 XML 格式或者 JSON 格式,基于 HTTP 协议

JAX-RS

  

  RS好处:基于HTTP协议,支持多种消息格式,比如XML,JSON
  更易于实现缓存机制(第一次访问资源,缓存,第二次访问资源,放回304客户端本地)

 

POST请求方式访问 保存操作
PUT请求方法访问 修改操作
GET请求方式访问 查询操作
DELETE请求方式访问 删除操作

不带参数查询:

    @GET
    @Path("/user")
    @Produces({"application/xml","application/json"})
    public List<User> findAllUsers();    

带参数查询:

    @GET
    @Path("/user/{id}")
    @Consumer("application/xml")
    public User findUserById(@PathParam("id") Integer id);

@Path 服务访问资源路径

 

@Produces 生成(方法返回值) @Consumes 消费 (方法参数)

  @Consumes 指定能够处理客户端传递过来数据格式
  @Produces 指定能否生成哪种格式数据返回给客户端

 

JAX-RS整合spring

  导入maven坐标

<!-- CXF进行开发必须导入-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!--客户端需要的坐标-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!--扩展JSON-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!--转换json工具包,被扩展json依赖-->
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.7</version>
        </dependency>

省略spring的基本坐标

在web.xml文件中配置servlet

    <!-- CXF Servlet -->
    <servlet>
        <servlet-name>CXFService</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFService</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>

引入名称空间

  xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

创建applicationContext-WebService.xml文件


applicationContext-WebService.xml配置模板

<jaxrs:server id="userService" address="/userService">
        <jaxrs:serviceBeans>
            <bean class="com.learn.web.service.base.impl.UserServiceImpl" />
        </jaxrs:serviceBeans>
        <jaxrs:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        </jaxrs:inInterceptors>
        <jaxrs:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxrs:outInterceptors>
    </jaxrs:server>

最终访问资源服务路径

  

    服务器根目录地址 + web.xml 配置 + applicationContext-WebService.xml address 配置 + 类 @Path +
方法 @Path

 


被传输的实体类需要加上@XmlRootElement,代表这个实体类能在web-service

例如

@XmlRootElement(name = "customer")
public class Customer {

 











以上是关于WebService的主要内容,如果未能解决你的问题,请参考以下文章

C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

Java RMI地址解析问题

当我们在webservice.asmx.cs中编写所有代码时,webservice.asmx有啥用?

自动生成webservice客户端代码后怎么调用

在idea中,怎么生成cxf webservice的客户端代码

如何调用webservice接口 ajax