您的位置:首页 > 编程语言 > Java开发

WebService技术总结(一):jdk自带的WebService API:jaxws

2016-12-20 10:47 597 查看
WebService的调用,一般存在服务端和客户端,由服务端编写接口和实现类,并发布成服务,生成wsdl文件,再由客户端去调用。

接下来按照上述步骤实现jaxws远程调用

1.在服务器端编写接口及实现类

接口:

package com.yonyou.service;

public interface QueryData {
public String[] query(int num);
}


实现类:注意类和方法上的注解即可

package com.yonyou.service.imp;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import com.yonyou.service.QueryData;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class QueryDataImp implements QueryData{

@Override
@WebMethod
public String[] query(int num) {

return new String[]{"yy1","yy2","yy3"};
}
}


2.发布服务,生成wsdl文件:

提示,可以使用ipconfig查看自己的Ipv4地址

public static void main(String[] args) {
String address = "http://10.101.238.173:15008/query";
//发布服务,传入地址和实现类对象
Endpoint.publish(address, new QueryDataImp());
}


打开浏览器,输入http://10.101.238.173:15008/query?wsdl

显示一个xml配置文件的网页,这就是wsdl文件,即webservice description language

1.从该文件的底部找到service节点,它的子节点port name=”QueryDataImpPort” binding=”tns:QueryDataImpPortBinding”

2.根据binding=”tns:QueryDataImpPortBinding”, 找到binding name=”QueryDataImpPortBinding” type=”tns:QueryDataImp”

3.根据type=”tns:QueryDataImp”,找到portType name=”QueryDataImp”,里面有方法名,输入的参数和返回值信息

总结:通过service找binding,通过binding找到portType,然后找到方法信息

在拿到服务端发布的wsdl文件之后,客户端怎么调用呢

首先打开cmd命令行,cd到客户端项目路径src下



然后通过wsdl文件生成java类



这时候刷新下客户端项目,会出现以下这些类



如果你的jdk是1.6及以下的,有一个类会报错



而注释里也写的很清楚,需要使用wsdl2java命令并加上”-frontend jaxws21”,即:wsdl2java -d . -frontend jaxws21 http://10.101.238.173:15008/query?wsdl

3.在客户端进行调用

public class Client {
public static void main(String[] args) {
//在wsdl中<service name="QueryDataImpService">
QueryDataImpService service = new QueryDataImpService();
//获取Port,也就是<portType name="QueryDataImp">
QueryDataImp query = service.getQueryDataImpPort();
StringArray nameArr = query.query(10);
List<String> names = nameArr.getItem();
if(names != null && names.size() > 0){
for (String name : names) {
System.out.println(name);
}
}
}
}


客户端更为灵活的Service调用

QName两个参数说明:



public static void main(String[] args) throws MalformedURLException {
//wsdl文件地址
URL url = new URL("http://10.101.238.173:15008/query?wsdl");
//namespace和服务类名
QName qName = new QName("http://imp.service.yonyou.com/", "QueryDataImpService");
Service service = Service.create(url, qName);
//获取portType
QueryDataImp query = service.getPort(QueryDataImp.class);
StringArray result = query.query(3);
List<String> item = result.getItem();
for (String ele : item) {
System.out.println(ele);
}
}


运行结果:

yy1
yy2
yy3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web service