一、在本地发布一个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); }