zoukankan      html  css  js  c++  java
  • webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】

    实现接口的webservice

    服务端

    
    import javax.jws.WebService;
    
    /**面向接口的webservice发布方式
     * 
     * 
     */
    @WebService
    public interface JobService {
        public String getJob();
    }
    
    
    
    
    
    
    import javax.jws.WebService;
    
    @WebService(endpointInterface="cn.it.ws.e.JobService")//设置服务端点接口 ,指定对外提供服务的接口
    public class JobServiceImpl implements JobService {
    
        @Override
        public String getJob() {
            return "JEE研发工程师|Android研发工程师|数据库工程师|前端工程师|测试工程师|运维工程师";
        }
        public void say(){
            System.out.println("早上好!");
        }
    }
    

    客户端

    
    import javax.xml.ws.Endpoint;
    
    public class Test {
    
        public static void main(String[] args) {
            JobService jobService=new JobServiceImpl();
            String address="http://192.168.114.10:9999/ws/jobservice";
            Endpoint.publish(address, jobService);
            System.out.println("wsdl地址:"+address+"?WSDL");
    
        }
    
    }

    CXF框架

    Apache CXF 是一个开源的 Services 框架,CXF 帮助您来构建和开发 Services 这些 Services 可以支持多种协议,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大简化了 Service可以天然地和 Spring 进行无缝集成。

    1. CXF介绍 :soa的框架

        • cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache
        • CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext
        • CXF默认是依赖于Spring的
        • Apache CXF 发行包中的jar,如果全部放到lib中,需要 JDK1.6 及以上,否则会报JAX-WS版本不一致的问题
        • CXF 内置了Jetty服务器 ,它是servlet容器,好比tomcat
    2. CXF特点

        1. 与Spring、Servlet做了无缝对接,cxf框架里面集成了Servlet容器Jetty
        1. 支持注解的方式来发布webservice
        1. 能够显示一个webservice的服务列表
        1. 能够添加拦截器:输入拦截器、输出拦截器 :
      • 输入日志信息拦截器、输出日志拦截器、用户权限认证的拦截器

    CXF开发

    要想使用CXF框架,那么就先导入jar包

    • asm-3.3.jar
    • commons-logging-1.1.1.jar
    • cxf-2.4.2.jar
    • jetty-continuation-7.4.5.v20110725.jar
    • jetty-http-7.4.5.v20110725.jar
    • jetty-io-7.4.5.v20110725.jar
    • jetty-security-7.4.5.v20110725.jar
    • jetty-server-7.4.5.v20110725.jar
    • jetty-util-7.4.5.v20110725.jar
    • neethi-3.0.1.jar
    • wsdl4j-1.6.2.jar
    • xmlschema-core-2.0.jar

    接口

    
            import javax.jws.WebParam;
            import javax.jws.WebResult;
            import javax.jws.WebService;
    
    @WebService(serviceName="languageManager")
    public interface LanguageService {
        public @WebResult(name="language")String getLanguage(@WebParam(name="position")int position);
    
    }

    实现:

    
    package cn.it.ws.cxf.a;
    
    import org.apache.cxf.frontend.ServerFactoryBean;
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    /**开发语言排行描述服务
     * 
     * 
     * @author 李俊  2015年5月17日
     */
    public class LanguageServiceImpl implements LanguageService {
        /* (non-Javadoc)
         * @see cn.it.ws.cxf.a.LanguageService#getLanguage(int)
         */
        @Override
        public String getLanguage(int position){
            String language=null;
            switch (position) {
            case 1:
                language="java"; 
                break;
            case 2:
                language="C";
                break;
            case 3:
                language="Objective-C";
                break;  
            case 4:
                language="C#";
                break;
    
            default:
                break;
            }
            return language;
        }
        /**通过cxf框架发布webservice
         *  1. ServerFactoryBean
         *    - 不设置注解也可以发布webservice服务, 不支持注解
         *    - 不支持拦截器的添加
         *  2. JaxWsServerFactoryBean
         *    - 支持注解
         *    - 可以添加拦截器
         *  3. webservice 访问流程:
         *    1. 检测本地代理描述的wsdl是否与服务端的wsdl一致 ,俗称为握手
         *    2. 通过soap协议实现通信 ,采用的是post请求 , 数据封装在满足soap规约的xml中
         *    3. 返回数据 同样采用的是soap通信,  数据封装在满足soap规约的xml中
         * @param args
    
        public static void main(String[] args) {
            LanguageService languageService=new LanguageServiceImpl();
            ServerFactoryBean bean=new ServerFactoryBean();
            //Endpoint :地址  , 实现对象
            bean.setAddress("http://192.168.114.10:9999/ws/cxf/languangeService");
            bean.setServiceClass(LanguageService.class);//对外提供webservcie的业务类或者接口
            bean.setServiceBean(languageService);//服务的实现bean
            bean.create();//创建,发布webservice
            System.out.println("wsdl地址:http://192.168.114.10:9999/ws/cxf/languangeService?WSDL");
        }
         */
        public static void main(String[] args) {
            LanguageService languageService=new LanguageServiceImpl();
            JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean();
            //Endpoint :地址  , 实现对象
            bean.setAddress("http://192.168.114.10:9999/ws/cxf/languangeService");
            bean.setServiceClass(LanguageService.class);//对外提供webservcie的业务类或者接口
            bean.setServiceBean(languageService);//服务的实现bean
            //添加输入拦截器  :输入显示日志信息的拦截器
            bean.getInInterceptors().add(new LoggingInInterceptor());
            //添加输出拦截器  :输出显示日志信息的拦截器
            bean.getOutInterceptors().add(new LoggingOutInterceptor());
    
            bean.create();//创建,发布webservice
            System.out.println("wsdl地址:http://192.168.114.10:9999/ws/cxf/languangeService?WSDL");
        }
    
    }
    

    CXF与Spring集成

    • 建立一个web项目
    • 准备所有jar包,将CXF_HOMElib项目下的所有jar包,全部都拷贝新项目的lib目录下.其中里面已经包含了Sring3.0的jar包 其中jetty 服务器的包可以不要.因为我们要部署的tomcat服务器中了
    • 在web.xml中配置cxf的核心servlet,CXFServlet
    • 此配置文件的作用类 拦截/ws/*的所有请求 类似Struts2的过滤器

    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"
             version="3.0">
        <display-name>CXF_Server</display-name>
        <!-- 添加  CXF 的Servlet ,处理 webservice的请求 -->
        <servlet>
            <servlet-name>cxf</servlet-name>
            <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
            <load-on-startup>0</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>cxf</servlet-name>
            <url-pattern>/ws/*</url-pattern>
        </servlet-mapping>
        <!-- Spring 监听添加 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    </web-app>

    实体:

    
    public class Employee {
        private Integer  id;
        private String name;
        private Integer age;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }
    

    接口:

    
    
    package cn.it.ws.cxf.b;
    
    import java.util.List;
    
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    import cn.it.ws.cxf.bean.Employee;
    @WebService(serviceName="EmployeeService")
    public interface EmployeeManager {
    
        void add(@WebParam(name="employee")Employee employee);
    
        @WebResult(name="employees")List<Employee> query();
    
    }

    接口实现:

    
    package cn.it.ws.cxf.b;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.it.ws.cxf.bean.Employee;
    
    /**员工管理的业务实现类
     * @author 李俊  2015年5月17日
     */
    public class EmployeeManagerImpl implements EmployeeManager {
        private List<Employee> employees=new ArrayList<>();
        @Override
        public void add(Employee employee){
            //添加到集合中
            employees.add(employee);
        }
        @Override
        public List<Employee> query(){
            return employees;
        }
    
    }
    

    Spring配置信息:

    
    <?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:p="http://www.springframework.org/schema/p"
            xmlns:jaxws="http://cxf.apache.org/jaxws"
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
          http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    
    
        <bean id="employeeManagerImpl" class="cn.it.ws.cxf.b.EmployeeManagerImpl"></bean>
        <!-- 配置cxf
           地址:      http://192.168.114.10:8080/CXF_Server/ws/employeeManager
           组成 :  http://192.168.114.10:8080 +CXF_Server( 项目名)+ws(过滤的路径)+/employeeManager(自定义部分)
           服务类 :
           服务的实现类:
           拦截器
            -->
        <jaxws:server address="/employeeManager" serviceClass="cn.it.ws.cxf.b.EmployeeManager">
            <jaxws:serviceBean>
                <ref bean="employeeManagerImpl"/>
            </jaxws:serviceBean>
            <!-- 配置输入显示日志信息的拦截器   -->
            <jaxws:inInterceptors>
                <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
            </jaxws:inInterceptors>
            <jaxws:outInterceptors>
                <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
            </jaxws:outInterceptors>
        </jaxws:server>
    
    
    </beans>

    IDEA下使用webservice

    我们的Intellij idea是一个非常好用的java ide,当然了,它也支持webservice开发。非常好用…由于在网上见到的教程非常多,我就贴几个我认为比较好的教程:

    http://www.biliyu.com/article/986.html

    http://blog.csdn.net/u010323023/article/details/52926051

    http://blog.csdn.net/dreamfly88/article/details/52350370

    获取天气预报

    我们现在webservice就基本入门了,现在我想要做的就是自己写的网站能够拿到天气预报的信息,于是我去http://www.webxml.com.cn/zh_cn/index.aspx找到了天气预报的服务

    这个是天气预报的WSDL地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx,那么我们只要解析该WSDL服务即可

    这里写图片描述

    如果不想得到所有的信息,那么我们可以在服务上找到我们想要对应的数据,也就是说:

    这里写图片描述

    这里写图片描述


  • 相关阅读:
    c语言----- 冒泡排序 for while do-while 递归练习
    c语言----实战植物大战僵尸
    c语言-----劫持系统03
    c语言-----劫持自己02
    c语言-----劫持原理01
    win10神州网信政府版去掉屏保
    将WebApi发布到IIS上(IIS6.0)(转)
    关于Logstash中grok插件的正则表达式例子
    说说看板在项目中的应用
    解决Gradle报错找不到org.gradle.api.internal.project.ProjectInternal.getPluginManager()方法问题
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7554372.html
Copyright © 2011-2022 走看看