java的JRE中封装了JAX-WS的jar包,1.6以上可以直接使用,很方便.
首先创建servcie类
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface Method1Service {
@WebMethod
int getCount(String Money);
}
然后创建逻辑类,继承刚创建的servcie接口
import javax.jws.WebService;
@WebService(endpointInterface="类在项目中的位置(带包名)")
public class Method1 implements Method1Service {
@Override
public int getCount(String Money) {
// 业务逻辑
return 5;
}
}
定义publisher(我称为发布类,我把这个接口作为一个监听器随项目一起启动了)
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.ws.Endpoint;
//实现监听器接口
public class Publisher implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Service Start");
// TODO Auto-generated method stub
//endpoint发布,前面的参数是发布地址,后面的是逻辑类
Endpoint.publish("http://localhost:8081/aswebservice",new Method1());
}
}
项目中的web.xml配置好监听器,这样启动项目时就会将这个webservice启动了,通过"发布地址?wsdl"可以访问接口说明文件.
http://localhost:8081/aswebservice?wsdl
调用接口要先生成代理类,Myeclipse中集成了jax-ws的客户端程序,可以直接通过wsdl文档生成,eclipse中没有集成,我们需要通过cmd控制台生成对应的代理类
扫描二维码关注公众号,回复:
4767944 查看本文章
需要在cmd控制台中输入这一串代码,-p后面是你要生成代理类的位置,生成之后可以去这个位置找代理文件,-keep后面的是你wsdl文件的地址
出现这个没有报错说明代理类已经生成成功
这些.java文件都是代理类的源文件,导入项目中就可以调用了
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class client {
public static Method1 getClient(){
URL url = null;
try {
url = new URL("http://localhost:8081/aswebservice?wsdl");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 第一个参数是服务的URI
// 第二个参数是在WSDL发布的服务名
QName qname = new QName("http://webservice.as.shudun.com/","Method1Service");
// 创建服务
Service service = Service.create(url, qname);
// 提取端点接口,服务“端口”。
Method1 eif = service.getPort(Method1.class);
return eif;
}
}
这是我写的工具类,用来返回客户端的,直接通过客户端调用就可以使用接口中的方法了
接口中的方法是传入参数后返回固定值5
调用两次的输出结果: