• 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

  • 相关阅读:
    js定时跳转
    MySQL跨表更新字段 工作记录
    windows下安装phpcms html/ 文件夹不可写的一种错误以及解决方法
    linux清理僵尸进程
    JQuery实现隔行变色和突出显示当前行 效果
    windows下配置lamp环境(4)---安装MySQL数据库5.6
    windows下配置lamp环境(5)---配置MySQL5.6
    windows下配置lamp环境(3)---配置PHP5.4
    windows下配置lamp环境(0)---软件获取
    windows下配置lamp环境(2)---配置Apache服务器2.2.25
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5843447.html
Copyright © 2020-2023  润新知