工具:Eclipse
说明:我知道的WebService的一点点的作用,例如:天气预报,这样的一个项目,应该很庞大,并不是所有的公司都能写的起的,
那所以呢,有的公司把天气预报做成了webService的形式的,这样,其他的企业如果想用天气预报的功能的话,不用自己写了,直接的花点钱买服务就行了。所以我测试的时候(局域网),为了展示出明显的效果,我就把服务端代码和客户端代码写在了不同的电脑上,只是为了增强效果。
随便建立一个Java-project
服务器端的代码
1:写一个接口,暴漏在外面的
package service;
//对外暴露的接口
publicinterfaceTestWebService{
publicString getName(String name);
}
2:写接口的实现类
package service;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;
//name webService的名称,ServiceName:webService的服务名称
@WebService(name="wsName",serviceName="wsServiceName")
@SOAPBinding(style =SOAPBinding.Style.RPC)//可能是我的jdk的版本低吧,如果不加这个注解,会报错,因为默认的是:
//SOAPBinding.Style.DOCUMENT
publicclassTestWebServiceImplimplementsTestWebService{
publicString getName(String name){
// TODO Auto-generated method stub
return"你好,"+name;
}
/**
* @param args
*/
publicstaticvoid main(String[] args){
Endpoint.publish("http://192.168.1.116:7777/wsServiceName/",newTestWebServiceImpl());
}
}
错误图:
错误信息截取:Wrapper class service.jaxws.GetName is
not found. Have you run APT to generate them?
试运行
TestWebServiceImpl 运行这个类的main方法,这个就是打开服务的过程
在浏览器里输入网址:http://localhost:7777/wsServiceName/?wsdl 能运行出xml来就行
接下来就是看 webService的实际应用了
在另一台电脑上,也是建立一个随便的项目,我这里建立的是javaProject
1:Test的代码:空代码,还没有十几意义
package test;
publicclassTest{
publicstaticvoid main(String[] args){
}
}
2:把webService的代码,引入到客户端,应用者的地方
开始 -》运行 (cmd)
我解释一下下面的这个命令
wsimport -s F:\practice\room\jdk6WSClient -keep http://192.168.1.116:7777/wsServiceName/?wsdl
wsimport 呢就是专门,命令来获取服务器的wsdl文件并生成客户端的stub类信息
-s 是用来指定生成的 服务器端的代理类(wsimport 能打出所有的命令,并能查看,每个命令的作用)
F:\practice\room\jdk6WSClient 这个是指我的客户端电脑上的项目所在的位置
-keep 就是 keep generated files
http://192.168.1.116:7777/wsServiceName/?wsdl 这个就是服务的网址
执行这个命令后,客户端的项目,就产生了响应的代码:如下图,刷新一下项目
共生成了两个类:WsName,WsServiceName 这两个生成的原因是,人家服务器端的代码里,这样写过了
@WebService(name="wsName",serviceName="wsServiceName") 在此日志的上面,写过了
package test;
import service.WsServiceName;
publicclassTest{
/**
* @param args
*/
publicstaticvoid main(String[] args){
WsServiceName test=newWsServiceName();
String msg=test.getWsNamePort().getName("哎呀呀");
System.out.println(msg);
}
}