为了对接之前老版本的接口,折腾了好几个小时.

主要是目前我的程序采用的是axis2的jax_rpc方式发布webservices服务,用这种服务的客户端,去调用老版本的jax_ws 2.2的接口,会报Runtime空指针。

于是采用cxf,使用了cxf3.0.3(当前版本) 的wsdl2java工具,生成了客户端的代码:

wsdl2java ****?wsdl

写了一个测试类来调用:

package com.test;
import java.net.MalformedURLException;
import java.net.URL; /**
* Created by wang on 15-1-27.
*/
public class Test {
public static void main(String[] args) {
URL wsdlLocation= null;
try {
wsdlLocation = new URL("***");
NocPacket nocPacket=new NocPacket();
nocPacket.setPayload("lasdfsfsdf");
EventForwarderService service=new EventForwarderService(wsdlLocation);
EventForwarderInterface ss=service.getEventForwarderPort();
FeedResult result=ss.send(nocPacket);
System.out.println(result.getResultDesc());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

测试没问题,能够调用ok。

不过此处有一个问题。如果用jdk7的话,它的包里面已经有jax_ws 2.2 的实现构造方法,不会报问题。但是如果用jdk6, cxf生成的代码中,继承的Services.class少一个带Feature的构造方法,jdk6默认只有一个构造。这里说的比较含糊,看一下jdk源码可以看出来问题的。用jdk6的话,要引入cxf的一个包:geronimo-jaxws_2.2_spec-1.2.jar 。cxf的压缩包自带的有。

然后要配置下包的加载顺序,引入的geronimo-jaxws_2.2_spec-1.2包优先加载,其次是jdk。如果是eclipse,在环境路径中,修改一下顺序。如果是Idea,在module中,也调整一下顺序。这样,在jdk6下也可以正常使用。

之所以没有采用cxf,是因为集成到axis2的环境中,包会冲突。

自身用的axis2,却用cxf的client,太坑。发现axis2也有wsdl2java的工具,果断用它来生成了客户端代码,这个生成的代码只有两个类,看上去很简洁:

wsdl2java -uri  ***?wsdl -o src

配置一下生成代码的目录为src。

代码是生成了,但是调用代码却折磨了好一会儿,根据网上的代码,是不行的。所以这里分享一下,以免后人多走弯路。

package com.wang;

import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
public class TestMain {
public static void main(String[] args) {
try {
NocPacket nocPacket=new NocPacket();
nocPacket.setPayload("1232311");
String urlString="****";
EventForwarderServiceStub stub=new EventForwarderServiceStub(urlString);
Send send=new Send();
send.setNocPacket(nocPacket);
SendE sende=new SendE();
sende.setSend(send);;
try {
SendResponse response=stub.send(sende).getSendResponse();
FeedResult result=response.getResult();
System.out.println(result.getResultDesc());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

网上的代码,比如这里调用我需要的send方法的话,他们直接是用send方法。但是本人试验了很多次都不成功,必须中间经过SendE这个方法对象。不知道这个是不是axis2后来修改过。

如此折腾了很久,终于在工程中,只用axis2就完成了服务端和客户端的所有操作。

JAX_WS 2.2 规范的webservices客户端实现(Axis2,Cxf)的更多相关文章

  1. WebServices客户端代码生成

    方式一: 官网下载cxf运行包:http://cxf.apache.org/download.html axis2:http://axis.apache.org/axis2/java/core/dow ...

  2. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录

    最近把XFire框架搭建的一个webservice换成CXF框架.访问webservice的客户端是C#写的.客户端调用webservice,数据能在客户端得到.看起来显然是成功了. 但其中在VS中添 ...

  3. WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)

    还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...

  4. webservice -- cxf客户端调用axis2服务端

    背景: 有个项目, 需要由第三方提供用户信息, 实现用户同步操作, 对方给提供webservice接口(axis2实现)并也使用axis2作主客户端调用我方提供的webservice接口 起初, 由于 ...

  5. 客户端动态调用cxf websevice 异常

    三月 30, 2014 10:06:40 上午 org.apache.cxf.common.jaxb.JAXBUtils logGeneratedClassNames 信息: Created clas ...

  6. Idea14 生成webservices

    一直为idea生成soap协议的webservices而纠结,当初做axis2的时候,用的是eclipse,用它的插件来生成.这次做短信平台,决定要换一下,因为eclipse用axis2生成的接口,会 ...

  7. 使用Apache CXF开发WebServices服务端、客户端

    在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = C ...

  8. 前端学HTTP之客户端识别和cookie

    前面的话 Web服务器可能会同时与数千个不同的客户端进行对话.这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端.本文主要介绍客户端识别及cookie机制 HTTP首部 HT ...

  9. axis2_1.6.2之构建web端和客户端 .

    参考资料: http://blog.csdn.net/apei830/article/details/5448897 axis2的官网 http://axis.apache.org/axis2/jav ...

随机推荐

  1. 精确除法:from __future__ import division

    在python中做除法运算,使用1/2运行结果为0,为取结果的整数部分 如果用1.0/2或1/2.0运行结果为0.5,按照浮点数的位数取结果 但是实际应用中我们需要取除法的精确结果,我们就可以在运行前 ...

  2. LuoguP1226 【模板】快速幂||取余运算

    题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...

  3. 64位windows+32位JDK8+32位eclipse是可以的

  4. Distributing Ballot Boxes

    Distributing Ballot Boxes http://acm.hdu.edu.cn/showproblem.php?pid=4190 Time Limit: 20000/10000 MS ...

  5. swift UICollectionView使用

    方法1:创建 的时候注册 layout /// 时间view private lazy var timeCollectionV: UICollectionView = { 1.直接注册 并设置好 UI ...

  6. geoserver 文件系统

    我介绍了GeoServer的一些重要的资源以及它们的访问接口,现在来看看它们的保存形式.GeoServer的数据没有保存到数据库,而是文件系统,这让我们的学习轻松不少.默认情况下,GeoServer的 ...

  7. 关于神奇的浮点型double变量

    1.因为double类型都是1.xxxxxxxxx(若干个0和1,二进制)乘以2的若干次幂来表示一个数,所以,和十进制的小数势必不能够一一对应,因为位数有限,总要有一个精度(两个数之间的实数是任意多的 ...

  8. [Selenium] jsclick

    SeleniumUtil.jsClick(driver, saveButtonEl);

  9. 连接数据库-stone

    # -*- coding:utf-8 -*- import pymysql class mysql: def __init__(self, host, port, dbuser, dbpwd, dbn ...

  10. sklearn 算法大全

    http://scikit-learn.org/stable/tutorial/machine_learning_map/