1.引言
WebService顾名思义就是web服务,web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种是soap1.2版本,soap服务类型的数据是xml数据格式的,而rest服务的数据类型是json格式的,这里主要介绍soap类型的服务。
2.什么是WSDL?
wsdl(网络服务描述语言)是Web Service的描述语言,也就是说wsdl文件是soap的使用说明书。在学习soap之前,认识WSDL是非常有必要的,只有能看懂WSDL文件,我们才可以去调用soap类型的Web服务,下面是一个非常简单的wsdl文件。
soap服务的描述文件 :从下面向上看
解释:首先我们可以看到服务的地址为:http://localhost:8080/hello,对应wsdl文件的地址为http://localhost:8080/hello,地址的前缀为soap
,说明这个服务是基于soap1.1版本的,然后我们可以看到服务的名称为HelloService
,HelloService
绑定的Port为HelloPortBinding
,然后我们找到HelloPortBinding
绑定的类型为Hello
,从Hello
中我们可以看到,支持一个方法叫做sayHello,关于sayHello的具体参数的信息我们可以从http://localhost:8080/hello?xsd=1中得到如下图所示:
3.在WSDL文件中我们可以获得什么信息?
- soap服务的名称
- soap服务的地址
- soap服务暴露的方法
- soap服务方法的参数
- soap服务方法参数的类型和相应的返回值执行
4.利用Java发布soap服务
接下来我们利用Java发布一个soap类型的服务,在Java JDK1.6版本以后,我们可以通过Endpoint
来发布一个soap服务,代码如下:
package com.skd.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
//必须要加注释
@WebService
public class Hello {
public String sayHello(String name){
return "hello " + name;
}
public static void main(String[] args) {
//服务的地址
String address = "http://localhost:8080/hello";
Hello implementor = new Hello();
//发布服务,第一个参数是服务的地址,第二个参数是发布出去服务的方法
Endpoint.publish(address, implementor);
}
}
4.使用myeclipse的插件来访问soap服务
- 首先打开myeclipse,点击Launch SOAP Web Services Explorer
- 点击WSDL Page
点击WSDL Main
输入我们发布服务的wsdl路径
- 输入服务的参数
- 查看状态,查看源
- 服务返回的数据
5.利用JDK注释控制WSDL文件
代码如下:
package com.skd.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(targetNamespace="http://com.wpx",serviceName="WPXService")
public class Hello {
//提供一个合法的web方法
@WebMethod(operationName="myMethod")
@WebResult(name="myRet")
public String sayHello(
@WebParam(name="name")
String name){
return "hello " + name;
}
//排除当前方法
@WebMethod(exclude=true)
public String sayHi(String name){
return "hi " + name;
}
public static void main(String[] args) {
String address = "http://localhost:8080/hello";//服务的发布地址
Hello implementor = new Hello();//提供服务的实例
Endpoint.publish(address, implementor);//发布服务
}
}
发布成功后,我们查看一下WSDL文件的变化: