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);

}

 

 

 

posted @ 2017-04-09 20:09  远近啊  阅读(911)  评论(0编辑  收藏  举报