1.使用JAX-WS开发webservice
JAX-WS 的全称为 Java API for XML-Based Webservices ,从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本,本教程我们使用jdk1.7.0_07开发。
那么如何才可以发布一个WebService呢?
1:用Jdk1.6.0_13以后的版本发布一个WebService服务,并通过地址栏查看它的wsdl文档.
2:通过wsimport生成客户端代码,调用并查看运行的结果.(学会如何调用是我们的重点).
3:从互联网上获取一个WebService网络公开的服务,并使用工具生成客户端,调用并查看结果。
测试代码包括服务端和客户端的开发
1.3.1 服务端开发:
代码:
1.webservice服务接口
package webservice;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface HelloServiceInf {
@WebMethod
public String getCityInfo(String city);
}
2.webservice服务实现类
package webservice;
import javax.jws.WebService;
@WebService
public class HelloServiceImp implements HelloServiceInf {
@Override
public String getCityInfo(String city) {
// TODO Auto-generated method stub
return "城市名称为:"+city;
}
}
3.发布webservice
package webservice;
import javax.xml.ws.Endpoint;
public class WebServicePublish {
public static void main(String[] args) {
String url= "http://192.168.17.104:8020/web";
Endpoint.publish(url, new HelloServiceImp());
System.out.println("webservice 发布成功");
}
}
打开浏览器,输入刚才发布的地址:
说明webservice发布成功,接下来将客户端怎么调用
wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码.服务器端用什么语言编写的并不重要.
wsimport.exe位于JAVA_HOME\bin目录下.
例如:在cmd的窗口下执行wsimport可以看到
常用参数为:
-keep:是否生成Java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
-extension:使用扩展来支持SOAP1.2
示例:
wsimport其他参数说明,我们经常使用的参数为-d,-s,-p
-d<目录>将会生成.class文件.
示例:wsimport –d . http://192.168.17.104:8020/web?wsdl
-s<目录>将会生成.java文件.
示例:wsimport –s . http://192.168.17.104:8020/web?wsdl
-p<包名>将生成的文件(.java或是.class修改成指定的包名)
示例:wsimport -s . -p cn http://192.168.17.104:8020/web?wsdl
这里我们在c盘生成
之后将生成的java代码拷贝到客户端,注意生成的java包名是否有冲突
客户端代码引用如下:
package com.bojoy;
import webservice.HelloServiceImp;
import webservice.HelloServiceImpService;
public class CityClient {
public static void main(String[] args) {
HelloServiceImpService helloServiceImpService = new HelloServiceImpService();
HelloServiceImp helloServiceImpPort = helloServiceImpService.getHelloServiceImpPort();
String cityInfo = helloServiceImpPort.getCityInfo("上海");
System.out.println("客户端调用webservice信息为:"+cityInfo);
}
}
结果如下: