最近在做的一个java后台批处理项目中,需要对外部发布服务接口供报表应用等项目调用,最初拿到任务时考虑使用JMX的方式,因为报表系统使用的也是java,但是后来考虑到异构项目所以最后决定使用webservice。
package com.think.wade.service;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* @WebService 定义在类之上,表示将该类发布成一个webservice
*
*/
@WebService
public class HelloWorld {
//@WebMethod 表示该方法发布访问
@WebMethod
public List<String> refreshAccountInfo(){
List<String> list = new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
return list;
}
//@WebMethod 表示该方法发布访问, exclude为true表示排除该方法
@WebMethod(exclude=true)
public String test(){
return "test";
}
public static void main(String[] args){
//发布webservice的方法,提供服务的地址和端口、提供服务的类实例
Endpoint.publish("http://127.0.0.1:11234/helloWord", new HelloWorld());
}
}
启动运行该类main方法,进行webservice的发布。
启动后在浏览器中输入刚才发布的地址: http://127.0.0.1:11234/helloWord,如果出现以下内容表示发布成功。
在jdk的bin目录下有个 wsimport.exe 的运行命令,它可以解析webservice服务的描述文件(见浏览器内容),并自动生成响应的java代码,因为wsdl描述文档是标准的,即使是非java语言发布的webservice服务,这里也可以解析并生成java代码。具体命令不做解释。
生成之后的结构:
其中 HelloWorldService 是调用的客户端入口,该类包含了注解 @WebServiceClient(name = "HelloWorldService") ,
package com.think.wade.client;
import java.util.List;
public class Client {
public static void main(String[] args){
//实例化
HelloWorldService hws = new HelloWorldService();
HelloWorld hw = hws.getHelloWorldPort();
List<String> list = hw.refreshAccountInfo();
System.out.println(list);
}
}
运行结果: