WebService中CXF的简单的配置和应用(ssm框架)

在学习java的过程中,会涉及到系统间的通信,两个系统之间的交互通信,也可以认为是一个系统发布服务,另外一个系统调用服务,其中我采用的是http协议进行通信,数据的序列化和反序列化都由CXF来完成,调用的服务返回什么就接收什么,作为程序员只需要关注自己的业务逻辑即可。下面将会说一下如何使用CXF及实现的过程中的一些配置。

第一:导包

<dependency>
   <groupId>org.apache.cxf</groupId>
   <artifactId>cxf-rt-frontend-jaxws</artifactId>
   <version>3.1.10</version>
</dependency>
<dependency>
   <groupId>org.apache.cxf</groupId>
   <artifactId>cxf-rt-transports-http</artifactId>
   <version>3.1.10</version>
</dependency>

将这两个包纳入进classpath下就可以了。这样就完成了第一步的操作(至于还要依赖spring的包,我不怎么了解)

 

第二:在服务端发布服务,这个过程是比较细的,不像是客户端调用那么简单,发布出去的服务为一个接口。分别说一下

1.在web.xml中配置如下信息: 

<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>/p/*</url-pattern>
</servlet-mapping>


    这就是CXF的servlet。这是在服务端中web.xml中配置的,客户端是不需要配置的。

2.配好web.xml后继续配置cxf.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xsi:schemaLocation=" http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    
    <jaxws:endpoint id="myService" implementor="com.my.send.service.impl.MyServiceImpl" address="/sendMail"/>
</beans>

解释一下蓝色字体的意思,其他的都是模板中,或者说是quickstart。endpoint id="myService";其中的id是可以随便起的,这个我现在么有用到。关键是后面的implementor一看便知是实现类。如下图所示:为src/main/java中的包。其中包含实现类和接口。

配置好spring-cxf.xml后将这个xml导入到spring-config.xml中,目的是随着spring的加载同时加载。

如上所示就配置好了cxf.xml的一些配置。

3.服务端接口的处理和实现类的处理

如上图所示的,一个是提供服务的接口,一个是接口的实现类。接口中要写上一个标签:

同样的在实现类中也有实现加入同样的标签:

加入的标签为上图所示.其中webservice中加了一个endpointInterface"";这其中的意思就是接口的终点。把包名和类名加入就可以。(包名+接口名)。这步完成,服务端的配置也就完了。这其中的一些业务逻辑根据个人需求写。

第三步:配置客户端的CXF。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">
 
    <jaxws:client id="myService"
                  serviceClass="com.my.send.service.MyService"
                  address="http://192.168.0.101:8083/p/sendMail"/>
</beans>

解释一些图中蓝色的字体所表示的意思:客户端也需要同样的包名和接口名,address中的内容为服务端的地址,通过http通信,其中/p/sendMail是请求服务端中web.xml中的CXFservlet。sendMail是自定义的,在服务端的cxf中可以看到。下图为客户端的包名和接口名。要严格与服务端的接口和包名保持一致,包括里面的接口方法。

配置好后需要在客户端中的接口处加上webservcie标签:如下图所示

完成上面的所有步骤就完成了一个完整的CXF的简单配置。其中服务端的POM.xml中的配置如下图所示,箭头所指的地方不写内容,当然也可以不加这个标签。

。下面就是启动两个系统了。经过一些配置,在服务端的方法,被客户端调用的时候就像是调用自己的方法一样,有返回值为String的话直接接受即可。下图为测试的结果

致此整个CXF的简单应用就完成了。

额外补充

  如果服务端返回的是一ArrayList集合的话,并且集合中放的是一个类:如User这个类包含很多的属性。将对象的属性赋值后,最后将对象放入集合中返回给客户端。这个返回的过程中,当客户端是需要接受的时候。这个接受过程中也是有讲究的,如下图在服务端中建立一个user的domain类

在客户端调用的时候返回的是一个集合,集合中放的是一个user或多个user,那你在客户端也需要写相同的User类至于包名可以不同,其实就是一个实体类的映射关系。返回的集合中的泛型为User,这个是User中的属性和服务端的User中的属性是一致命的。否则会报错。。总之:User要把它看成是同一个类在不同包中就可以了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值