最近,领导分配了一个任务,做接口联调。情况是这样,对方客户升级了接口采用CXF,而我们还是用的XFire1.2.6,首先就遇到了这个问题:XFire调用CXF参数为Null的问题 。

在网上搜了一大堆资料:

http://blog.csdn.net/larry_lv/article/details/6721057

http://ks2144634.blog.163.com/blog/static/133585503201412855556210/

按照第一个始终还是没能解决,后来找到第二个花了不少时间也还是未能解决。

最后通过仔细琢磨,在第二个中发现Xfire默认会给映射的参数名称加上命名空间(接口所在包的逆向),尝试将targetNamespace的值改为接口包的逆向终于调试成功。

一、CXF服务服务端代码

接口类HelloWorld.java

package com.hsy.server;

import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.hsy.pojo.User; @WebService
public interface HelloWorld { String sayHi(@WebParam(name="name", targetNamespace= "http://server.hsy.com/") String name);
String sayHiToUser(User user);
String[] SayHiToUserList(List<User> userList); }

实现类HelloWorldImpl.java

package com.hsy.server;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import com.hsy.pojo.User; @WebService(endpointInterface="com.hsy.server.HelloWorld", serviceName="HelloWorld")
public class HelloWorldImpl implements HelloWorld { Map<Integer, User> users = new LinkedHashMap<Integer,User>(); @Override
public String sayHi(String name) {
System.out.println(name);
return "Hello,"+name;
} @Override
public String sayHiToUser(User user) {
users.put(users.size()+1, user);
return "Hello,"+user.getName()+","+user.getDescription();
} @Override
public String[] SayHiToUserList(List<User> userList) {
String[] result = new String[userList.size()];
int i = 0;
for(User u:userList){
result[i] = "Hello " + u.getName();
i++;
}
return result;
} }

服务启动类WebServiceTest.java

package com.hsy.server;

import javax.xml.ws.Endpoint;

public class WebServiceTest {

    public static void main(String[] args) {

        HelloWorldImpl hw = new HelloWorldImpl();
String address = "http://localhost:8080/cxf_service";
Endpoint.publish(address, hw);
System.out.println("WebService暴露成功。。。"); } }

二、XFire客户端测试代码

Xfire测试类XfireClient.java

package com.xhw;

import java.net.HttpURLConnection;
import java.net.URL;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender; /**
* @filename XfireClient.java
* @author xiehongwei
* @date 2017-6-21 下午4:09:47
*/
public class XfireClient { int Timeout=300000;//单位是毫秒 public static void main(String[] args) throws Exception {
XfireClient xc = new XfireClient();
String urlStr = "http://localhost:8080/cxf_service/webservice/helloWorld?wsdl";
String moniterMethod = "sayHi"; Client client = xc.loadClient(urlStr); String name = "xiehongwei";
Object[] objs = client.invoke(moniterMethod, new Object[] { name });
System.out.println("返回值为:"+objs[0]);
} public Client loadClient(String urlStr) throws Exception{
URL _url = new URL(urlStr);
HttpURLConnection httpConnection = (HttpURLConnection)_url.openConnection();
httpConnection.setReadTimeout(Timeout);//设置http连接的读超时,单位是毫秒 httpConnection.connect();
Client _client = new Client(httpConnection.getInputStream(), null);
_client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf( Timeout ));//设置发送的超时限制,单位是毫秒;
_client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
_client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");
return _client;
} }

XFire调用CXF参数为Null的问题的更多相关文章

  1. XFire客户端调用CXF服务端(四)

    前面章节:http://www.cnblogs.com/xiehongwei/p/8082337.html 已经开发出了CXF服务端,现在用XFire开发客户端调用CXF服务端,代码如下: impor ...

  2. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  3. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul.      ...

  4. Java调用WebService方法总结(6)--XFire调用WebService

    XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...

  5. Axis,axis2,Xfire以及cxf对比 (转)

    Axis,axis2,Xfire以及cxf对比   http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http:// ...

  6. SOA 下实现分布式 调用 cxf+ webService +动态调用

    近期项目间隙 自学了  webservice   一下 是我写的  一个demo 首先我们在web.xml 里配置如下 <servlet> <servlet-name>CXFS ...

  7. Java程序调用带参数的shell脚本返回值

    Java程序调用带参数的shell脚本返回值 首先来看看linux中shell变量(\(#,\)@,$0,$1,\(2)的含义解释 变量说明: -  \)$  Shell本身的PID(ProcessI ...

  8. axis、xfire、CXF 、JWS

    1.JWS是Java语言对WebService服务的一种实现,用来开发和发布服务.而从服务本身的角度来看JWS服务是没有语言界限的.但是Java语言为Java开发者提供便捷发布和调用WebServic ...

  9. WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用

    背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...

随机推荐

  1. vmware运行ubuntu虚拟机出现诡异的鼠标闪烁

    正在开心的写着AC自动机,突然发现鼠标消失了. 习惯性地动动鼠标,却还是没有反应,停止移动鼠标后鼠标却显现了出来??(吃惊.gif 在加载软件的时候,就算鼠标停止也会闪烁(其实这个虚拟机以前加载也会闪 ...

  2. 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

    当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...

  3. 番外:可刷新PDB的管理操作(如何切换PDB Switching Over)

    基于版本:19c (12.2.0.3) AskScuti 主题:可刷新PDB如何进行切换操作 内容说明:本篇延续如何克隆可刷新的PDB(Refreshable PDB)一文,进行切换实验. 具体请参考 ...

  4. ASP.NET 模型验证2--验证部分属性

    在开发MVC时,模型验证非常常见,平常我们用的应该都是全验证 if(ModelState.IsValid){ //验证成功要做的事 .....} 但是有时候我们需要部分验证,比如修改用户信息时,因为更 ...

  5. 《深入理解Java虚拟机》读书笔记十

    第十一章  晚期(运行期)优化 1.HotSpot虚拟机内的即时编译 解释器与编译器: 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生 ...

  6. plt/sns draw histgram

    当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白. import matplotlib.pyplot as pltx = np.triu(ged) # ...

  7. 如何在vivado中调用ultraedit 编辑器

    ISE下点击菜单Edit -> Preferences -> Editor. 在Editor选项框里选择Custom,在Command line syntax文本框里输入: {C:/Pro ...

  8. Mapper-元素和属性

    Mapper.xml文件内部的元素和属性     parameterType(输入类型) §  传递简单类型 §  使用#{}占位符,或者${}进行sql拼接, #{}括号中的值可以任意, ${}括号 ...

  9. window环境下获取python安装的路径

    1.cmd + win  打开命令行 2.where python

  10. Java-POJ1006-Biorhythms(中国剩余定理)

    https://blog.csdn.net/shanshanpt/article/details/8724769 有中文题面,就不解释了. 妥妥的中国剩余定理没跑了. Java跑得慢,一点办法也没有, ...