WebService技术总结(一):jdk自带的WebService API:jaxws
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |