分布式.RPC-WebService CXF框架

 系列博文:

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService三要素,三个规范, Soap协议_闲猫的博客-CSDN博客

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_闲猫的博客-CSDN博客

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService CXF框架_闲猫的博客-CSDN博客

分布式.RPC-WebService Restful风格实现_闲猫的博客-CSDN博客


目录

CXF简介

入门案例

服务器

客户端

CXF开发SOAP1.2

CXF和Spring整合

服务器

客户端


CXF简介

       CXF是Apache公司产品,可以使用轻松实现WebService功能。

入门案例

服务器

步骤:

  1. 创建java工程,引入cxf的jar包
  2. 编写服务类
  3. 发布服务

代码:

JaxWsServerFactoryBean server [ww1] = new JaxWsServerFactoryBean();

server.setAddress[ww2] ("http://localhost:12345/member");

server.setServiceBean[ww3] (new MemberService());

server.create[ww4] ();


 [ww1]创建JaxWsdl的工厂Bean

 [ww2]设置地址

 [ww3]设置获取的服务器类

 [ww4]发布服务

测试:

客户端

步骤:

1. 创建java工程 ,引入cxf的jar包

2. 生成本地代码

         

  3. 调用远程服务

代码:

JaxWsProxyFactoryBean client = new JaxWsProxyFactoryBean();

client.setAddress("http://localhost:12345/member");

client.setServiceClass(MemberService.class);

MemberService memberService = (MemberService) client.create()[ww1] ;

Member member = memberService.getMember("");[ww2] 

System.out.println(member.getName());


 [ww1]获取接口,这时候MemberService是接口(服务器中是类)

 [ww2]调用,就跟调用自己的函数一样的格式

CXF开发SOAP1.2

       只需加注解@BindingType(SOAPBinding.SOAP12HTTP_BINDING),不需要引入扩展包。

CXF和Spring整合

       这里发布两个模块服务。

服务器

步骤:(示例的配置只看格式,不看内容)

1. 创建web工程,添加cxf的jar包 和applicationContext.xml

2. 修改web.xml  添加spring监听

        添加spring的监听器,并且配置配置文件扫描路径

        

 3. 修改web.xml  添加CXFServlet控制器

        

 4. 编写服务类

5. 编写applicationContext.xml

        单个服务接口发布:

        

        多个服务接口发布:

         

6. 测试

         

 代码:

1. 创建web工程,添加cxf的jar包 和applicationContext.xml

        工程:

         

applicationContext.xml配置文件:

<?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" xmlns:cxf="http://cxf.apache.org/core"

[ww1]      xsi:schemaLocation="http://www.springframework.org/schema/beans

                                        http://www.springframework.org/schema/beans/spring-beans.xsd

                                        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

                                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

[ww2]                                       http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">

</beans>


 [ww1]引入WebService的命名空间

 [ww2]引入WebService的命名空间

2. 修改web.xml  添加spring监听

        Spring监听器名称:org.springframework.web.context.ContextLoaderListener

        将Spring配置文件配置在全局参数中:contextConfigLocation

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext.xml</param-value>

</context-param>

<listener>

    <listener-class>

           org.springframework.web.context.ContextLoaderListener

     </listener-class>

</listener>

3. 修改web.xml  添加CXFServlet控制器

        CxfServlet控制器:org.apache.cxf.transport.servlet.CXFServlet

<servlet>

    <servlet-name>cxfServlet</servlet-name>

    <servlet-class>

         org.apache.cxf.transport.servlet.CXFServlet

    </servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>cxfServlet</servlet-name>

    <url-pattern>/ws/*</url-pattern>     

</servlet-mapping>

4. 编写服务类

        WeatherService服务类:(添加了@WebService注解的普通类)

@We        bService

public class WeatherService {

   public Weather getWeather(String str) {

      return new Weather(123l, "赵菲");

   }

}

MemberService这个服务类就不列了,一样。

5. 编写applicationContext.xml

<?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" xmlns:cxf="http://cxf.apache.org/core"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

                                        http://www.springframework.org/schema/beans/spring-beans.xsd

                                        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

                                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

                                        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">

<!-- 服务类 -->

<bean id="member"

       class="cn.itcast.Service.member.MemberService" />

<bean id="weather"

       class="cn.itcast.Service.weather.WeatherService"/>

<!-- 发布服务,指定地址 -->  

<jaxws:server address="/member[ww1] ">

    <jaxws:serviceBean>

       <!-- 注入服务类 -->

       <ref bean="member"/>

    </jaxws:serviceBean>

</jaxws:server>

<jaxws:server address="/weather">

    <jaxws:serviceBean>

       <ref bean="weather"/>

    </jaxws:serviceBean>

</jaxws:server>

   

</beans>


 [ww1]需要添加到servlet后边的

6. 测试

        

测试地址:

         http://localhost:8080/server/ws/member?wsdl

        http://localhost:8080/server/ws/weather?wsdl

地址组成:

        server:项目名称

        ws:servlet需要匹配的那个地址

        

        member和 weather 配置的访问路径: 

        

        ?wsdl 这个是访问wsdl的约定 

附录:完整web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:applicationContext.xml
		</param-value>
	</context-param>
	
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	
	<servlet>
		<servlet-name>cxfServlet</servlet-name>
		<servlet-class>
			org.apache.cxf.transport.servlet.CXFServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>cxfServlet</servlet-name>
		<url-pattern>/ws/*</url-pattern>		
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
</web-app>

客户端

步骤:

1. 创建java工程 ,添加cxf的jar包 和applicationContext.xml

2. 生成本地代码

3. 编写applicationContext.xml 

        

 4. 编写代码调用本地代理

        

代码:

1. 创建java工程 ,添加cxf的jar包 和applicationContext.xml

         

2. 生成本地代码

        将cmd的当前地址导在工程下的src目录,使用:wsimport –s . 地址 ,两次生成客户端代码。

        wsimport –s . http://localhost:8080/server/ws/member?wsdl

        wsimport –s . http://localhost:8080/server/ws/weather?wsdl

3. 编写applicationContext.xml 

<?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" xmlns:cxf="http://cxf.apache.org/core"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

                                        http://www.springframework.org/schema/beans/spring-beans.xsd

                                        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

                                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

                                        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">

    <jaxws:client

        id="member[ww1] " 

        address="http://localhost:8080/server/ws/member?wsdl[ww2] "

         serviceClass="cn.itcast.service.member.MemberService[ww3] "/>

           

    <jaxws:client

        id="weather"

        address="http://localhost:8080/server/ws/weather?wsdl"

        serviceClass="cn.itcast.service.weather.WeatherService"/>

   

</beans>   


 [ww1]这个是在Main中调用是使用

 [ww2]测试是访问的地址

 [ww3]生成的客户端服务类,是一个接口

4. 编写代码调用本地代理

public static void main(String[] args) {

    ApplicationContext context [ww1] = new ClassPathXmlApplicationContext(

            "applicationContext.xml");

    WeatherService weatherService [ww2] = (WeatherService) context

            .getBean("weather");

    Weather weather = weatherService.getWeather("");[ww3] 

    System.out.println(weather.getName());

    MemberService memberService = (MemberService) context.getBean("member");

    Member member = memberService.getMember("");

    System.out.println(member.getName());

}


 [ww1]获取ApplicationContext对象

 [ww2]获取服务对象,这个weather就是上面配置的jaxws的id

 [ww3]使用该接口进行调用即可


END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值