zoukankan      html  css  js  c++  java
  • 6.用CXF编写基于Spring的WebService

    首先是服务器端:

    //实体类
    public class Weather {
    
        private String region;//区域编码
        private String regionName;//区域名称
        private float temperature;//温度
        private boolean isRain;//是否下雨
    
        public Weather() {
            super();
        }
        public Weather(String region, String regionName, float temperature,
                boolean isRain) {
            super();
            this.region = region;
            this.regionName = regionName;
            this.temperature = temperature;
            this.isRain = isRain;
        }
        
        public String getRegion() {
            return region;
        }
        public void setRegion(String region) {
            this.region = region;
        }
        public String getRegionName() {
            return regionName;
        }
        public void setRegionName(String regionName) {
            this.regionName = regionName;
        }
        public float getTemperature() {
            return temperature;
        }
        public void setTemperature(float temperature) {
            this.temperature = temperature;
        }
        public boolean isRain() {
            return isRain;
        }
        public void setRain(boolean isRain) {
            this.isRain = isRain;
        }
        
        @Override
        public String toString() {
            return "Weather [region=" + region + ", regionName=" + regionName
                    + ", temperature=" + temperature + ", isRain=" + isRain + "]";
        }
    }
    //SEI
    @WebService
    public interface WeatherDao {
    
        //通过区域编码查找该地区天气情况
        @WebMethod
        Weather findWeatherByRegion(String region);
    }
    //SEI实现类
    @WebService
    public class WeatherService implements WeatherDao {
    
        @Override
        public Weather findWeatherByRegion(String region) {
            return new Weather("fjxm", "福建省厦门市", 20, true);
        }
    
    }
    //配置beans.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"
        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">
        
        <!-- cxf的一些核心配置(必须引入) -->
        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        
        <!-- implementor:SEI实现类全类名 -->
        <!-- 
            address:名字可以任意取;
            webService部署路径:主机名/工程名/address
            wsdl文档:通过主机名/工程名/address?wsdl
            不再需要手动去发布webService!
        -->
        <jaxws:endpoint id="weatherWS" 
            implementor="com.cxf.service.WeatherService"
            address="/weatherws" />
    </beans>
    //配置web.xml,spring文件随容器启动加载
    <?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>cxf_spring_webService_server</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <!-- 配置beans.xml -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:beans.xml</param-value>
      </context-param>
      <listener>
          <listener-class>
              org.springframework.web.context.ContextLoaderListener
          </listener-class>
      </listener>
      <servlet>
          <servlet-name>CXFServlet</servlet-name>
        <display-name>CXF Servlet</display-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>/*</url-pattern>
      </servlet-mapping>
    </web-app>
    //发布该工程,查看wsdl文档:
    
    <?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://service.cxf.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://dao.cxf.com/" name="WeatherServiceService" targetNamespace="http://service.cxf.com/">
      <wsdl:import location="http://localhost:8080/cxf_spring_webService_server/weatherws?wsdl=WeatherDao.wsdl" namespace="http://dao.cxf.com/">
        </wsdl:import>
      <wsdl:binding name="WeatherServiceServiceSoapBinding" type="ns1:WeatherDao">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="findWeatherByRegion">
          <soap:operation soapAction="" style="document"/>
          <wsdl:input name="findWeatherByRegion">
            <soap:body use="literal"/>
          </wsdl:input>
          <wsdl:output name="findWeatherByRegionResponse">
            <soap:body use="literal"/>
          </wsdl:output>
        </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="WeatherServiceService">
        <wsdl:port binding="tns:WeatherServiceServiceSoapBinding" name="WeatherServicePort">
          <soap:address location="http://localhost:8080/cxf_spring_webService_server/weatherws"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>

    ************至此,服务器端发布成功,接下来是客户端生成代码以及配置和测试****************

    //配置客户端的client-beans.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"
        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">
        
        <!-- serviceClass:SEI -->
        <!-- address:server端webService的发布地址 -->
        <jaxws:client id="weatherClient" 
            serviceClass="com.cxf.dao.WeatherDao" 
            address="http://localhost:8080/cxf_spring_webService_server/weatherws" />
    </beans>
    //生成客户端代码同cxf生成客户端代码步骤---略
    //测试
    public class Test {
    
        public static void main(String[] args) {
            //获取spring容器,自动创建WeatherDao实现类对象
            ClassPathXmlApplicationContext context =
                    new ClassPathXmlApplicationContext("client-beans.xml");
            
            //client-beans.xml里的id
            WeatherDao weatherDao = (WeatherDao) context.getBean("weatherClient");
            Weather weather = weatherDao.findWeatherByRegion("fjxm");
            System.out.println(weather);
        }
    }

    执行结果:

    Weather [rain=true, region=fjxm, regionName=福建省厦门市, temperature=20.0]
  • 相关阅读:
    随想24:中国终将发展成第一强国
    随想23:所见的并不一定是真实
    工作4年之后对人性、社会的疯言
    随想22:出路
    开源视频会议bigbluebutton开发(3)——架构体系图
    开源视频会议bigbluebutton开发(2)——配置命令工具
    开源视频会议bigbluebutton开发(1)——初始化安装以及配置
    视频会议之BigBlueButton
    26款 网络会议/视频会议开源软件
    Tomcat 7最大并发连接数的正确修改方法
  • 原文地址:https://www.cnblogs.com/Json1208/p/5165001.html
Copyright © 2011-2022 走看看