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

主要是目前我的程序采用的是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就完成了服务端和客户端的所有操作。

转载于:https://www.cnblogs.com/juepei/p/4256241.html

JAX_WS 2.2 规范的webservices客户端实现(Axis2,Cxf)相关推荐

  1. 使用IDEA根据wsdl生成WebServices客户端代码-Java

    生成代码的操作可以在已经存在的项目中进行,也可以在新建的项目中进行 下面新建一个项目进行客户端代码生成操作 依次点击File-->New-->Project新建一个新项目 选择Java,并 ...

  2. WebServices客户端代码生成

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

  3. IntelliJ IDEA根据wsdl生成WebServices客户端代码 Sprinng Boot

    最近项目要用到一个发票开票接口,但是对方居然用的是webService的方式调用,而我们用的是SpringBoot IDEA在2019的版本后就没有显示的集成WebService了,导致找了很多种方式 ...

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

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

  5. springboot调用webServices(生成固定客户端代码调用,非动态调用)

    ## 环境 jdk-1.8.springboot-2.3.10.RELEASE.SAOP-1.1 一.SAOP工具测试 使用SaopUI工具测试: 1)File->New SAOP Projec ...

  6. WebService客户端几种实现方式

    文章目录 一.发布一个webservice服务(jdk原生) 1.编写服务接口 2.服务实现类 3.发布服务 4.浏览器查看是否发布成功 二.几种客户端调用方式 1.jdk原生调用(需要获取服务接口文 ...

  7. 客户端,服务器,天气预报

    引用:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务 ...

  8. 如何在HTTP客户端与服务器端之间保持状态(转)

    HTTP协议与状态保持HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是 ...

  9. Java EE 7中的WebSocket客户端API

    在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...

最新文章

  1. jira 8.2.1 安装 及一些常见的坑
  2. 实战部署MySQL用户认证的Postfix邮件系统(3)
  3. QT绘制散点图(2)
  4. node安装和使用redis
  5. 【theano-windows】学习笔记四——theano中的条件语句
  6. excel数据生成sql insert语句
  7. 5个Python特性 越早知道越好的
  8. 3Dslicer +VS2013编译介绍
  9. Java如何将Ftp文件解压_ftp解压工具,ftp解压工具在java环境下配置其连接
  10. netron神经网络可视化
  11. Python基于wordnet实现词语相似度计算分析
  12. java爬虫模拟登陆_java爬虫实战之模拟登陆
  13. Java转码amr_java实现amr转mp3
  14. Struts2通配符和动态方法调用
  15. SPSS神经网络心得(一)
  16. 基于Java springmvc+mybatis酒店信息管理系统设计和实现
  17. 网络诈骗有哪些防范措施
  18. CANopen协议学习
  19. 科学计数法 与 普通数字 转换
  20. 杜笙除镍树脂Tulsimer CH-90实际运用案例

热门文章

  1. MySQL5.7的date类型_Mysql5.7 虚拟列数据类型为DATE时,如何存入数据?
  2. 取余运算怎么算_TensorFlow2.0(2):数学运算
  3. mysql 函数返回表格_mysql 数据分析如何实现日报、周报、月报和年报?
  4. Flex 布局详解 - 转自阮一峰老师
  5. 微信小程序学习做动画效果
  6. 【iOS】通过NSURLProtocol提高Web加载速度
  7. 微信小程序(canvas)画图保存到本地相册(wepy)
  8. jfinal框架下使用c3P0连接池连接sql server 2008
  9. ASP.NET WebAPi之断点续传下载(下)
  10. 服务器产品选型与性价比图解