zoukankan      html  css  js  c++  java
  • Java中的WebService服务

    一、在本地发布一个webservice服务

    1、使用jdk中的 javax.xml.ws.Endpoint 类的 static Endpoint publish(String address, Object implementor)方法在本地发布服务

    package com.ietree.webservice.firstwebservice;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.xml.ws.Endpoint;
    
    // @WebService(serviceName="myService",targetNamespace="http://com.ietree.webservice/") 该注解的作用是修改serviceName以及命名空间
    @WebService(serviceName="myService",targetNamespace="http://com.ietree.webservice/")
    public class HelloWebService {
    
        public static void main(String[] args) {
            // 服务地址
            String address = "http://127.0.0.1:8080/hello";
            
            /*
             * 调用静态方法Endpoint.publish创建一个系统服务
             * 参数:
             *    address:访问地址
             *    implementor:实现类
             */
            Endpoint.publish(address, new HelloWebService());
            
            System.out.println("HelloWebService ready!");
        }
        
        // webservice中的第一个方法
        // @WebMethod(operationName="hello") 该注解的作用是修改service的方法名称
        // @WebParam(name="name") 该注解的作用是修改方法参数名称
        // @WebResult(name="returnMsg") 该注解的作用是修改方法返回值的名称
        @WebMethod(operationName="hello")
        @WebResult(name="returnMsg")
        public String sayHello(@WebParam(name="name")String name){
            System.out.println("Hello " + name);
            return "Hello " + name;
        }
        
        // webservice中的第二个方法方法
        // @WebMethod(exclude=true) 该注解的作用是将指定的公用public排除发布,使用户不能访问
        @WebMethod(exclude=true)
        public String sayHi(){
            return "Hi";
        }
    }

    注意:在本地服务启动之后可以直接通过http://127.0.0.1:8080/hello?wsdl地址查看服务详情,通过http://127.0.0.1:8080/hello?xsd=1地址查看方法详情。

    2、利用Apache CXF方式创建WebService服务

    2.1 不使用注解发布WebService

    首先导入cxf的jar包

    package com.ietree.webservice.firstwebservice;
    
    import org.apache.cxf.frontend.ServerFactoryBean;
    
    public class HelloService {
    
        public static void main(String[] args) {
            
            // 创建ServerFactoryBean
            ServerFactoryBean svrFactory = new ServerFactoryBean();
            
            // 或者使用JaxWsServerFactoryBean生成工厂Bean功能和ServerFactoryBean一样,在使用JaxWsServerFactoryBean时不同的是,需要再Service类上加上@WebService注解
            //JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
            
            // 设置访问地址
            svrFactory.setAddress("http://127.0.0.1:8080/hello");
            
            // 设置实现类或者接口
            svrFactory.setServiceClass(HelloService.class);
            
            // 启动服务jetty内置web服务
            svrFactory.create();
        }
        
        // WebService的一个方法
        public String sayHi(String name){
            System.out.println("Hi " + name);
            return "Hi " + name;
        }
    
    }

     2.2 使用注解发布WebService

     首先导入CXF jar包,编写HiService类,其中使用的是JaxWsServerFactoryBean

    package com.ietree.webservice.firstwebservice;
    
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    public class HiWebService implements IHiWebService {
    
        public static void main(String[] args) {
            
            // 创建ServerFactoryBean
            //ServerFactoryBean svrFactory = new ServerFactoryBean();
            
            // 或者使用JaxWsServerFactoryBean生成工厂Bean功能和ServerFactoryBean一样,在使用JaxWsServerFactoryBean时不同的是,需要再Service类上加上@WebService注解
            JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
            
            // 设置访问地址
            svrFactory.setAddress("http://127.0.0.1:8080/hi");
            
            // 设置实现类或者接口,面向类
            //svrFactory.setServiceClass(HiWebService.class);
            // 设置实现类或者接口,面向接口
            svrFactory.setServiceClass(IHiWebService.class);
            
            // 在使用接口方式的时候,必须通过setServiceBean方法指定实现者, 实例化Service
            svrFactory.setServiceBean(new HiWebService());
            
            // 输入日志监控,只要有访问就能监控到
            svrFactory.getInInterceptors().add(new LoggingInInterceptor());
            // 输出日志监控,只要有访问就能监控到
            svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
            
            // 启动服务jetty内置web服务
            svrFactory.create();
            
            System.out.println("HiWebService ready!");
        }
        
        // WebService的一个方法
        public String sayHi(String name){
            System.out.println("Hi " + name);
            return "Hi " + name;
        }
    
    }

    再编写HiService类的接口

    package com.ietree.webservice.firstwebservice;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    /**
     * WebService的一个方法接口
     * 
     * @author Root
     */
    //@WebService(serviceName="myService",targetNamespace="http://com.ietree.webservice/") 该注解的作用是修改serviceName以及命名空间
    @WebService(serviceName="MyWebService",targetNamespace="http://com.ietree.webservice/")
    public interface IHiWebService {
    
        
        // @WebMethod(operationName="hello") 该注解的作用是修改service的方法名称
        // @WebParam(name="name") 该注解的作用是修改方法参数名称
        // @WebResult(name="returnMsg") 该注解的作用是修改方法返回值的名称
        // @WebMethod(exclude=true) 该注解的作用是将指定的公用public排除发布,使用户不能访问
        /**
         * WebService的一个方法
         * 
         * @param name 名字参数
         * @return 字符串
         */
        @WebMethod(operationName="sayHi")
        @WebResult(name="returnMsg")
        String sayHi(@WebParam(name="pName") String name);
    
    }

     

  • 相关阅读:
    【转】构建高并发高可用的电商平台架构实践
    【转】深入解析浏览器的幕后工作原理
    【转】解释器,树遍历解释器,基于栈与基于寄存器
    EasyDarwin返回401 Unauthorized解决方法
    【转】SDP file
    音频PCM格式
    H264相关知识
    testNG之异常测试
    testNG之组测试
    testNG之顺序执行
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/6686145.html
Copyright © 2011-2022 走看看