WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。
要学会使用第三方服务,比如调用天气等。
进入网站 http:// www.webxml.com.cn 进入对应的服务页面,如天气:
然后点击 "服务说明" 得到如下页面:
然后下载该页面,之后使用命令 "wsomport -s . 文件的路径" 解析该文件得到源代码,之后把源码拷项目中即可使用。
下载的文件如下:WeatherWS.asmx.xml
解析:G:\webservice>wsimport -s . G:\webservice\WeatherWS.asmx.xml 得到源码如下:
使用:
public class Cilent {
public static void main(String[] args) {
WeatherWS ws = new WeatherWS();
WeatherWSSoap soap = ws.getWeatherWSSoap();
ArrayOfString as = soap.getWeather("哈尔滨", null);
List<String> list = as.getString();
for(String str : list){
System.out.println(str);
}
}
}
我们自己可以发布服务
自己发布一个服务:
新建一个项目:
---------------------------------------------
import javax.jws.WebService;
public interface MyService {
public String sayHiTo(String name);
public int add(int a, int b);
}
-----------------------------------------------------
@WebService(endpointInterface="com.myservice.service.MyService")
public class MyServiceImpl implements MyService{
public String sayHiTo(String name) {
return "您好:" + name;
}
public int add(int a, int b) {
return a + b;
}
}
-----------------------------------------------------------
发布:
public class Main {
public static void main(String[] args) {
Endpoint.publish("http://localhost:9001/com.myservice.service/MyService",
new MyServiceImpl());
System.out.println("发布完毕...");
}
}
--------------------------------------
之后在浏览器中输入:
http://localhost:9001/com.myservice.service/MyService?wsdl
即可看到我们发布的服务说明
接下来要使用我们发布的服务:
方式一:
使用 wsimport -s 命令直接解析到我们的新项目中:
wsimport -s G:/workSpace/webservice-myservice-cilent/src/ -p com.myservice.service -keep -verbose http://localhost:9001/com.myservice.service/MyService?wsdl
格式:wsimport -s 项目src -p 完成包名 -keep -verbose(显示解析的详细信息,可省略) 发布的地址
方式二:
把上述服务说明页面下载下来,之后使用 wsimport -s . 解析它得到源码,拷贝到项目中即可使用
wsimport -s . G:\webservice\MyService.xml 得到源码:
之后就可以使用了:
@WebService 注解的属性:
name : WebService 的名称。映射到 WSDL 文件中的<wsdl:portType> 元素默认值为 JWS 文件中 Java 类的非限定名称。
targetNamespac : 用于从此 WebService 生成的 WSDL 和 XML 元素的 XML 名称空间。默认值由 JAX-RPC specification 指定。
serviceName : WebService 的服务名。映射到 WSDL 文件中的 <wsdl:service> 元素。
默认值为 JWS 文件中 Java 类的非限定名称,后面加上字符串 Service。
portName : 如上图
wsdlLocation : 预定义 WSDL 文件的相对或绝对 URL。如果指定此特性,则当 JWS 文件与 WSDL 文件中的端口类型和绑定不一致时,jwsc Ant 任务不生成 WSDL 文件,并且会返回错误。
endpointInterface : 现有服务端点实现的接口文件的全限定名称。如果指定此特性,则假设您已经创建了该端点接口文件,并且该文件位于 CLASSPATH 中。