Atitit 动态调用webservice与客户端代理方式调用
Atitit 动态调用webservice与客户端代理方式调用
方式1: 使用call.invoke 直接调用WSDL,缺点:麻烦,不推荐……特别是JAVA调用.NET的WS时,会有不少的问题需要解决。
方式2: 生成测试STUB……此种方法更快捷。如果用.NET开发WS客户端,就是用的这种方式……
客户端调用web service方法
首先要使用cxf的wsdl2java命令工具生成服务代理类,如:wsdl2java -p com.charles.client http://localhost:8080/queryUser?wsdl
具体命令格式可使用wsdl2java /?查看。生成后的代理类名是:服务实现类名+Service
方法一:使用标准的JAX-WS的API完成客户端调用
//注意。此处http:http://www.itfad.net/queryUser是服务的命名空间,可查看wsdl文件中的targetNamespace
QName qName = new QName("http://www.itfad.net/queryUser","QueryUserImplService");
QueryUserImplService ImplService =new QueryUserImplService(new URL("http://localhost:8080/CXFDemo/queryUser?wsdl"),qName);
IQueryUser service=(IQueryUser)ImplService.getPort(IQueryUser.class);
方法二:javax.xml.ws.Service
String endPointAddress = "http://localhost:8080/queryUser";//服务实际地址
//此处http://charles.com/为命名空间,默认是包名的倒序。IQueryUserService=服务接口名+service
javax.xml.ws.Service service = javax.xml.ws.Service.create(new QName("http://charles.com/","IQueryUserService"));
//IQueryUserPort=服务接口名+Port
service.addPort(new QName("http://charles.com/","IQueryUserPort"),javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, endPointAddress);
IQueryUser queryService1 =service.getPort(IQueryUser.class);
System.out.println(queryService1.query(user));
这里其实利用wsdl2java工具为我们生成类时已经包含了这种方法。比如我们的服务接口是IQueryUser,那么我们会发现生成的文件下有个IQueryUserService类
该类正是继承至javax.xml.ws.Service,并封装以上代码的功能,调用代码如下:
IQueryUserService queryUserService=new IQueryUserService();//默认构造函数里使用默认wsdl地址和服务的QName
IQueryUser queryService1 =queryUserService.getIQueryUserPort();//方法内部调用了super.getPort(IQueryUserPort, IQueryUser.class);
System.out.println(queryService1.query(user));
方法三:使用CXF中JaxWsProxyFactoryBean客户端代理工厂调用web服务
JaxWsProxyFactoryBean soapFactoryBean = newJaxWsProxyFactoryBean();
soapFactoryBean.setAddress("http://localhost:8080/queryUser");
soapFactoryBean.setServiceClass(IQueryUser.class);
Object o = soapFactoryBean.create();
IQueryUser service = (IQueryUser)o;
方法四:使用CXF的JaxWsDynamicClientFactory动态代理工厂
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("people.wsdl", classLoader);
Object person =Thread.currentThread().getContextClassLoader().loadClass("com.acme.Person").newInstance();
Method m = person.getClass().getMethod("setName", String.class);
m.invoke(person, "Joe Schmoe");
client.invoke("addPerson", person);
1.1. Axis动态调用
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
QName q = new QName(namespace, "GetCXInfoByVIN");
call.setOperationName(q);// LSJW26H35BS047598
call.addParameter(new QName(namespace, "vin"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// call.setReturnClass(org.w3c.dom.Element.class);
Object obj = call.invoke(new Object[] { "LSJW26H35BS147598" });// LSJW26H35BS147598
参考
webservice 开发总结.docx
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui
埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
头衔:uke总部o2o负责人,全球网格化项目创始人,uke宗教与文化融合事务部部长,Uke部落首席大酋长,uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,奶牛科技cto ,uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
转载请注明来源:attilax的专栏 http://www.cnblogs.com/attilax/
--Atiend
Atitit 动态调用webservice与客户端代理方式调用的更多相关文章
- 动态生成WebService的客户端
给定了WebService地址和调用接口后动态的生成DLL,第二次再请求时会先判断DLL是否存在,以提高执行效率 核心代码下: /// <summary> /// 动态生成WebServi ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- Java调用WebService方法总结(4)--Axis调用WebService
Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...
- C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用
1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...
- C# .NET 动态调用webservice的三种方式
转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W ...
- 采用动态代理方式调用WEB服务(转载+整理)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- java实现WebService 以及客户端不同的调用方式
java 实现WebService 以及不同的调用方式 webservice: 就是应用程序之间跨语言的调用 wwww.webxml.com.cn 1.xml 2. ws ...
- java 调用webservice (asmx) 客户端开发示例
这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助. 因为最近有个项目要调用webservice接口,之前接触的都是Java开发服务端和客户端的接口,开发前 ...
- cxf webservice生成客户端代码及调用服务端遇到的问题
1. 从网上下载cxf开发的工具 apache-cxf-3.1.4.zip, 解压文件,找到apache-cxf-3.1.4\bin目录,里面包含一个wsdl2java文件 2. 设置环境变量 1. ...
随机推荐
- [NHibernate]利用LINQPad查看NHibernate生成SQL语句
上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...
- for in 结构
in 运算符也是一个二元运算符,但是对运算符左右两个操作数的要求比较严格.in 运算符要求第 1 个(左边的)操作数必须是字符串类型或可以转换为字符串类型的其他类型,而第 2 个(右边的)操作数必须是 ...
- js/jQuery使用过程中常见问题
目录 一.jQuery选择器选择选中的或者disabled的选择框时attr函数无效 二.jQuery each函数的break/continue 三.jQuery 获取元素的left会值/left数 ...
- HttpClient发送Get和Post请求
package JanGin.httpClient.demo; import java.io.IOException; import java.io.UnsupportedEncodingExcept ...
- Github fork同步
做到以下几个步骤: 添加远程上游工程repository. git remote add upstream git@github.com:*.git git remote -v 将上游工程代码合并到本 ...
- 530 User cannot log in, home directory inaccessible.
服务器是winserver,控制面板-用户账号里新建了一个Ftp账户用来做ftp连接.可在本地连接FTP总提示530 User cannot log in, home directory inacce ...
- T-SQL Recipes之Dynamic PIVOT and UNPIVOT
PIVOT PIVOT在行转列的时候经常用到,最便捷的方式就是通过示例来理解它的作用. 示例1 Query to Return Select Product Data from AdventureWo ...
- The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder is not applicable for the arguments
The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i ...
- 使用display:table来解决一些问题
一直有,多栏的需求,当然用table布局,很快就做完了.不怎么喜欢用table,刚开始使用display:table,但是有一条老是不能达到我的效果,那就是有一行不固定宽度的时候,就不知道怎么处理,今 ...
- dd——留言板再加验证码功能
1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表 这个不要碰, ...