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

主要是目前我的程序采用的是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. SearchEngine Note

    [SearchEngine Note] 1.查全率. 2.查准率. 3.查全率与查准率的关系. 4.四大系统. 5.权威性网页反向链接多.网页的平均出席为25.7,即平均每一个网页含有25.7个指向其 ...

  2. 命名空间出错 namespace Web.Skin.@default

    namespace Web.Skin.default会报错 因为default是关键字/保留字,所以需要在前面加@符号; namespace Web.Skin.@default

  3. spark开启远程调试

    一.集群环境配置 #调试Master,在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量 export SPARK_MASTER_OPTS="-Xdeb ...

  4. 在c#中设置Excel格式

    生成excel的时候有时候需要设置单元格的一些属性,可以参考一下: range.NumberFormatLocal = "@"; //设置单元格格式为文本 ange.get_Ran ...

  5. 利用python实现二分法和斐波那契序列

    利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值 ...

  6. [leetcode]416. Partition Equal Subset Sum分割数组的和相同子集

    Given a non-empty array containing only positive integers, find if the array can be partitioned into ...

  7. centos7下创建mysql5.6多实例

    一.mysql安装目录说明mysql5.6以二进制安装包安装在/data/mysql56下数据目录为/data/mysql56/data下配置文件为/etc/my.cnf下 二.多实例目录说明/mys ...

  8. tcl&redis安装

    http://www.linuxfromscratch.org/blfs/view/cvs/general/tcl.html tcl http://redis.io/topics/quickstart

  9. 21个ui设计技巧,让你的设计不落伍

    1.功能性极简主义 不少移动端APP和网站开始基于极简主义设计风来设计,而极简主义本身并非关注所有的信息,而是通过减少非关键信息来突出特定的内容,它是有着极强的功能性和偏向的.它有着如下的特征: ・简 ...

  10. 设计模式之Adapter设计模式

    这个设计模式是我这两天刚学的,这儿算是我的读书笔记发布出来是供大家一起学习,后面有我自己的感悟,下面是我网上整理的 以下情况使用适配器模式 • 你想使用一个已经存在的类,而它的接口不符合你的需求. • ...