最近,领导分配了一个任务,做接口联调。情况是这样,对方客户升级了接口采用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. Intellij IDEA史上最全快捷键大全

    古人有云:工欲善其事,必先利其器,要是只是手握利器,而不能发挥其最大的效益,那无异于赤手空拳,对敌对垒. 那古人所云,未得其精髓,只能为碎语闲言尔. 自动代码 常用的有fori/sout/psvm+T ...

  2. python3练习100题——030

    这周开始,要重新振作一点吧! 如果每天都想着消费升级,而不是想着如何投入时间精力让自己进步,未来根本就看不到希望. 我想要更认真的活着 live wild 原题链接:http://www.runoob ...

  3. gflag的简单入门demo

    gflags 一. 下载与安装 这里直接使用包管理器安装: sudo apt install libgflags-dev 二. gflags的简单使用 1. 定义需要的类型 格式: DEFINE_类型 ...

  4. JavaScript控制流和表达式

    一.with语句 使用with语句可以简化JavaScript语句的一些类型,即把一个对象的多个引用降为一个引用,对with块里的属性和方法的引用将被看作是对对象的引用. <script> ...

  5. Appium连接模拟器

    Appnium 环境搭建 覆盖文件 将SDK中platform-tools目录下的这三个文件 复制到模拟安装路径bin目录下,覆盖原有的这三个文件 adb命令 开启服务 adb start-serve ...

  6. 2020算法设计竞赛 I、匹配星星

    链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 天上有n颗星星,每颗星星有二维坐标(xi,yi)(x_i, y_i)(xi​,yi​),还有一个 ...

  7. 并查集路径压缩优化 UnionFind PathCompression(C++)

    /* * UnionFind.h * 有两种实现方式,QuickFind和QuickUnion * QuickFind: * 查找O(1) * 合并O(n) * QuickUnion:(建议使用) * ...

  8. 打表法fffff

    打表法: 打表前先运行一下 看一看速度 优化: O3 #pragma GCC optimize(3,"Ofast","inline") O2  #pragma ...

  9. Centos7 安装VNC实现远程桌面

    1.设置root用户方法: 1.# 复制一个服务设置的模板,命令如下: cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vn ...

  10. linux安装Zookeeper及redis集群

    亲测有效: 1.linux下安装zookeeper:https://www.cnblogs.com/zuolun2017/p/8186254.html 2.linux下安装redis集群:https: ...