webService第一个案例学习
准备工作
1.myeclipse 10.7.1
2.jdk 1.7.0_79
1.新建Server端
1.文件—>新建JavaProject,命名为WebServer1
2.新建包,给包命名为top.wilma.www.day1.service
a.新建接口HelloWService
package top.wilma.www.day1.service; import javax.jws.WebMethod; import javax.jws.WebService; /** * SEI service interface * @authorwilma * */ @WebService publicinterface HelloWService { @WebMethod public String sayHello(String name); } |
b.新建实体类HelloWServicImpl
package top.wilma.www.day1.service.impl; import javax.jws.WebService; import top.wilma.www.day1.service.HelloWService; /** * SEI service implements class * @authorwilma **/ @WebService publicclass HelloWServiceImplimplements HelloWService { @Override public String sayHello(String name) { return name+":Hello!"; } } |
c.新建服务端测试类
package top.wilma.www.day1.service.test; import javax.xml.ws.Endpoint; import top.wilma.www.day1.service.impl.HelloWServiceImpl;
publicclass HelloWSTest { /** * @param args * @autho wilma */ publicstaticvoid main(String[] args) { String address ="http://127.0.0.1:8060/WebServer1/hello"; Endpoint.publish(address,new HelloWServiceImpl()); System.out.println("webservice publish success!"); } } |
刷新WebServer1
d.测试结果
右击HelloWTest类,run as ,选择Java Application 测试WebService 打开浏览器,访问地址http://127.0.0.1:8060/WebServer1/hello?wsdl 浏览器若能展示xml树形结构,则表示接口测试成功。 |
2.生成Client端
新建JavaProject,命名为WebServer_client,生成的代码放置于src下
使用命令窗口生成客户端
格式:wsimport –s–p “生成类所在包名” –keep “wsdl发布地址”。注:“wsdl发布地址”不要漏了“?wsdl”
切换到工作空间,刷新WebServer_client。在top.wilma.www.client包下新建测试类,命名为HelloWSTest
3.最终测试
注意事项:
1.JDK版本过低问题
报类似如下异常:runtimemodele error:Wrapper class
解决方法:jdk版本调整为1.6或1.6以上
2.生成命令不完整
命令路径不完整示例:
D:\Juze\Java\demo\myeclipse\WebServer1_client\src>wsimport-p top.wilma.www.day1
-keep http://127.0.0.1:8060/WebServer1/hello
命令完整示例
D:\Juze\Java\demo\myeclipse\WebServer1_client\src>wsimport -p top.wilma.www.day1
-keep http://127.0.0.1:8060/WebServer1/hello?wsdl
小节:采用jdk开发webservce要点
1.开发服务器端
@WebService(SEI和SEI的实现类)
@WebService (SEI中所有方法)
发布Web Servcie(Endpoint 终端)
2.开发客户端
使用eclipse提供webservcie的浏览器访问
查看对应的wsdl文档 (一般是用浏览器访问 url?wsdl )
请求webservice并查看请求和响应的信息(webservice 浏览器)
创建客户端应用编码方式访问
--借助jdk/bin wsimport.exe 工具生成客户端代码
wsimport -keep url //根据请求地址生成代码,url为wsdl文件的路径 url为web地址
dos命令窗口进入要保存代码的工作空间src下 执行命令
--借助生成的代码编写请求代码 //根据本地wsdl文件生成代码
dos命令窗口进入要保存代码的工作空间src下 wsimport -keep 本地wsdl文件路径
TCP/IP代理监控请求和响应信息
正常不使用TCP/IP等代理形式访问http://127.0.0.1:12345/getWeather?wsdl能显示信息,在使用代理后,在浏览器进行访问http://127.0.0.1:54321/getWeather?wsdl 能显示出内容,表明代理设置好了,在TCP/IP窗口中就能看到请求和响应信息。若使用这个工具进行监控客户端,需要改变SEI中的端口为代理端口即可。
WebServcie 第二个案例天气预报
根据提供schema文件来生成代码
制作schema文件
打开浏览器,访问http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,然后右击查看网页源码,将其保存为.schema文件。
建立WebService Client端
新建Java Project,命名为WeatherProject.
在dos命令窗口下,进入到WeatherProject/src,执行wsimport –ptop.wilma.www.weather –keep D:\weather.wsdl 回车。
注意:直接生成客户端代码会抛异常,无法生成客户端代码
1.将对应的wsdl文档保存到本地
2.修改wsdl文档的部分内容
将<s:elementref="s:schema"/><s:any/> 改成<s:any minOccurs="2"maxOccurs="2"/>
注:这个是Java代码调用net的webservcie的问题
再次执行上方代码会打印“generate code… compiling code…”,OK
回到工作空间,刷新工程
根据生成的wsdl文件来写测试类。可根据“<wsdl:service name=”WeatherWS”> ”标签中的name即是工厂类。
package top.wilma.www.test;
import