zoukankan      html  css  js  c++  java
  • WebService系列二:使用JDK和CXF框架开发WebService

    一、使用JDK开发WebService

    服务端程序创建: 

    1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer

     2. 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法

     1 package com.study.webservice.ws;
     2 
     3 import javax.jws.WebMethod;
     4 import javax.jws.WebService;
     5 
     6 /**
     7  * 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法
     8  *
     9  */
    10 //使用@WebService注解标注IWebService接口
    11 @WebService
    12 public interface IWebService {
    13 
    14     //使用@WebMethod注解标注IWebService接口中的方法
    15     @WebMethod
    16     String sayHello(String name);
    17     
    18     @WebMethod
    19     String save(String name,String pwd);
    20 }

     3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法

    package com.study.webservice.ws.impl;
    
    import javax.jws.WebService;
    
    import com.study.webservice.ws.IWebService;
    
    /**
     * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法
     *
     */
    //使用@WebService注解标注IWebService接口的实现类WebServiceImpl
    @WebService
    public class WebServiceImpl implements IWebService {
    
        @Override
        public String sayHello(String name) {
            System.out.println("WebService sayHello "+name);
            return "sayHello "+name;
        }
    
        @Override
        public String save(String name, String pwd) {
            System.out.println("WebService save "+name+", "+pwd);
            return "save Success";
        }
    
    }

     4. 使用Endpoint(终端)类发布webservice

    package com.study.webservice.ws.publish;
    
    import javax.xml.ws.Endpoint;
    
    import com.study.webservice.ws.impl.WebServiceImpl;
    
    /**
     * 使用Endpoint(终端)类发布webservice
     *
     */
    public class WebServicePublish {
    
        public static void main(String[] args) {
            //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
            //String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的
            //String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的
            String address = "http://192.168.152.1:8989/WS_Server/Webservice";
            //使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
            Endpoint.publish(address , new WebServiceImpl());
            System.out.println("发布webservice成功!");
        }
    }

     6. 启动主程序WebServicePublish,效果如下

    7.在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

     

    客户端程序创建: 

     1. 新建一个JDK开发webservice的客户端maven项目JDKWebServiceClient

     

    2. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

     

    3. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

     打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

     

      4. 借助生成的代码编写调用WebService对外提供的方法

    package com.study.webservice.ws.client;
    
    import com.study.webservice.ws.impl.WebServiceImpl;
    import com.study.webservice.ws.impl.WebServiceImplService;
    
    /**
     * 调用WebService的客户端
     *
     */
    public class WSClient {
        public static void main(String[] args) {
            //创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的
            WebServiceImplService factory = new WebServiceImplService();
            //通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
            WebServiceImpl wsImpl = factory.getWebServiceImplPort();
            //调用WebService的sayHello方法
            String resResult = wsImpl.sayHello("小不点");
            System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);
            System.out.println("---------------------------------------------------");
            //调用WebService的save方法
            resResult = wsImpl.save("小不点","123");
            System.out.println("调用WebService的save方法返回的结果是:"+resResult);
        }
    }

    5. 启动客户端主程序WSClient,效果如下

    二、使用CXF框架开发WebService

    服务端程序创建: 

    1.新建一个使用CXF框架开发webservice的服务端maven项目CXFWebServiceServer

     

    2. 在pom.xml中引入相关依赖

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <cxf.version>3.1.4</cxf.version>  
      </properties>
    
      <dependencies>
         <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-frontend-jaxws</artifactId>  
                <version>${cxf.version}</version>  
        </dependency>  
          
        <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-transports-http</artifactId>  
                <version>${cxf.version}</version>  
        </dependency>  
                  
                  
        <!-- 使用cxf内置的jetty服务器发布WebService -->  
        <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-transports-http-jetty</artifactId>  
                <version>${cxf.version}</version>  
        </dependency> 

     2. 定义一个接口,使用@WebService注解标注接口

    package com.study.webservice.ws;
    
    import javax.jws.WebService;
    
    /**
     * 定义一个接口,使用@WebService注解标注接口
     *
     */
    //使用@WebService注解标注IWebService接口
    @WebService
    public interface IWebService {
    
        String sayHello(String name);
        
        String save(String name,String pwd);
    }

     3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法,注意代码标红色的地方

    package com.study.webservice.ws.impl;
    
    import javax.jws.WebService;
    
    import com.study.webservice.ws.IWebService;
    
    /**
     * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法
     *
     */
    //使用@WebService注解标注IWebService接口的实现类WebServiceImpl
    @WebService(serviceName = "IWebService",
    endpointInterface = "com.study.webservice.ws.IWebService"
    )
    public class WebServiceImpl implements IWebService {
    
        @Override
        public String sayHello(String name) {
            System.out.println("WebService sayHello "+name);
            return "sayHello "+name;
        }
    
        @Override
        public String save(String name, String pwd) {
            System.out.println("WebService save "+name+", "+pwd);
            return "save Success";
        }
    
    }

     4. 使用CXF的JaxWsServerFactoryBean发布webservice

    package com.study.webservice.ws.publish;
    
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    import com.study.webservice.ws.IWebService;
    import com.study.webservice.ws.impl.WebServiceImpl;
    
    /**
     * 使用CXF的JaxWsServerFactoryBean发布webservice
     *
     */
    public class WebServicePublish {
    
        public static void main(String[] args) {
            //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
            //String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的
            //String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的
            String address = "http://192.168.152.1:8989/WS_Server/Webservice";
            //使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
            /*Endpoint.publish(address , new WebServiceImpl());*/
            
            JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
            factory.setServiceClass(IWebService.class);
            //服务发布地址
            factory.setAddress(address);
            factory.setServiceBean(new WebServiceImpl());
            factory.create();
            
            System.out.println("发布webservice成功!");
        }
    }

     5. 启动服务端主程序WebServicePublish

    6. 在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

    客户端程序创建: 

     1. 新建一个使用CXF框架开发webservice的客户端maven项目CXFWebServiceClient

     

    2. 在pom.xml中引入相关依赖

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <cxf.version>3.1.4</cxf.version> 
      </properties>
    
      <dependencies>
           <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-frontend-jaxws</artifactId>  
                <version>${cxf.version}</version>  
        </dependency>  
          
        <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-transports-http</artifactId>  
                <version>${cxf.version}</version>  
        </dependency>  

    3. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

     

    4. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

     打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

     

      5. 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端

    package com.study.webservice.ws.client;
    
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    
    import com.study.webservice.ws.IWebService;
    
    /**
     * 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端
     *
     */
    public class WSClient {
        public static void main(String[] args) {
            JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();
            jwpfb.setServiceClass(IWebService.class);
            String address = "http://192.168.152.1:8989/WS_Server/Webservice";
            jwpfb.setAddress(address);
            IWebService hs = (IWebService) jwpfb.create();
            //调用WebService的sayHello方法
            String resResult = hs.sayHello("小不点");
            System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);
            System.out.println("---------------------------------------------------");
            //调用WebService的save方法
            resResult = hs.save("小不点","123");
            System.out.println("调用WebService的save方法返回的结果是:"+resResult);
        }
    }

     6.启动客户端主程序,效果如下:

    源代码获取地址:

    https://github.com/leeSmall/WebService

    参考文章:

    http://www.cnblogs.com/xdp-gacl/p/4259481.html

    https://www.cnblogs.com/luangeng/p/6575061.html

  • 相关阅读:
    关于点击率模型,你知道这三点就够了
    【AI】Computing Machinery and Intelligence
    MATLAB 的函数句柄
    MATLAB 的unique函数——数组矩阵的唯一值
    MATLAB 的数据导入与导出
    MATLAB 的函数
    MATLAB 向量
    MATLAB 的break语句和continue语句
    MATLAB 的循环语句
    MATLAB 的条件分支语句
  • 原文地址:https://www.cnblogs.com/leeSmall/p/8969802.html
Copyright © 2011-2022 走看看