13_CXF和Spring整合发布服务

【服务端】

第一步:建立一个Web项目

第二步:填充CXF jar包

第三步:创建接口及服务类

 

【工程截图(对比之前的WebService_CXF_Server00)】

 

 

【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">

<!-- service -->
<bean id="weatherInterface" class="com.Higgin.ws.service.WeatherInterfaceImpl"></bean>

<!-- 
    发布服务
    使用jaxws:server和jaxws:endpoint可以发布服务
    WebService地址=Tomcat地址值+CXF Servlet的路径+ /weather 
-->
<jaxws:server address="/weather" serviceClass="com.Higgin.ws.service.WeatherInterface">
    <jaxws:serviceBean>
        <ref bean="weatherInterface"/>
    </jaxws:serviceBean>
</jaxws:server>
</beans>

【web.xml】

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>WebService_CXF_Spring_Server00</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 加载Spring容器 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  
  <!-- CXF的Servlet -->
  <servlet>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 本系统的WebService路径必须以/ws/开头 -->
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>
  
  

</web-app>

【启动Web容器】

访问 http://localhost:8080/WebService_CXF_Spring_Server00/ws

 

 接着访问 http://localhost:8080/WebService_CXF_Spring_Server00/ws/weather?wsdl

可见WebService服务端启动正常。

 【测试注意】

因为Spring和CXF整合将WebService通过TomCat发布,WebService和应用程序共用一个端口是8080。

测试WebService和应用程序(JSP)是否可以共存(都可以访问)

正式上线使用80端口。

  

 

【客户端】

【生成客户端代码】

首先,使用利用WebService的wsdl2java工具生成客户端代码:

【客户端工程截图】

 

【applicationContext.java】

<?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:clietn>调用服务端
        jaxws:client内部使用JaxWsProxyFactoryBean方式
        serviceClass:指定portType地址(需要使用wsdl2java工具生成) 
    -->
    <jaxws:client id="weatherClient" address="http://localhost:8080/WebService_CXF_Spring_Server00/ws/weather?wsdl"
        serviceClass="com.higgin.weather.WeatherInterface">
    </jaxws:client>
</beans>

 

【ClientTest.java】

package com.higgin.ws.cxf;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.higgin.weather.WeatherInterface;
import com.higgin.weather.WeatherModel;

public class ClientTest {
    private ApplicationContext applicationContext;
    
    @Before
    public void before(){
        applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    }
    
    @Test
    public void testCxfSpringClient(){
        //从Spring容器中取出portType
        WeatherInterface weatherInterface=(WeatherInterface) applicationContext.getBean("weatherClient");
        
        //调用portType方法
        List<WeatherModel> list=weatherInterface.queryWeather("杭州");
        
        for(WeatherModel weatherModel:list){
            System.out.println(weatherModel.getDetail());
            Date date=weatherModel.getDate().toGregorianCalendar().getTime();
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
            System.out.println(weatherModel.getTemperatureMax());
            System.out.println(weatherModel.getTemperatureMin());
        }
        
    }
}

 

【运行结果】

 

 

【总结:使用jaxws实现SOAP1.1、SOAP1.2】

方式一:

CXF编程实现:

1.使用jaxwsServerFactoryBean发布WebService服务端。

  需要设置:

  jaxwsServerFactoryBean.setAddress("WebService地址");

  jaxwsServerFactoryBean.setServiceClass("porType类路径"); //由程序员编写的

  jaxwsServerFactoryBean.setServiceBean("portType类对象");

  jaxwsServerFactoryBean.create();  //发布一个服务

2.使用jaxwsProxyFactory实现客户端调用WebService服务

  jaxwsServerFactoryBean.setAddress("WebService的wsdl地址");

  jaxwsServerFactoryBean.setServiceClass("portType路径");  //portType是wsdl2java工具生成

  jaxwsServerFactoryBean.setCreate();   //创建portType对象

 

方法二:

CXF和Spring整合开发服务端和客户端。

1.使用<jaxws:Server>发布WebService服务端

   在<jaxws:Server>设置Address、serviceClass、serviceBean

2.使用<jaxws:Client>调用WebService服务

 在<jaxws:Server>设置Address、serviceClass

posted @ 2016-09-05 20:02  HigginCui  阅读(17158)  评论(1编辑  收藏  举报