Java中的WebService服务

时间:2023-03-09 03:52:04
Java中的WebService服务

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

1、使用jdk中的 javax.xml.ws.Endpoint 类的 static Endpointpublish(Stringaddress,Objectimplementor)方法在本地发布服务

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