搬砖的小刘 2016-08-04 11:26 采纳率: 0%
浏览 8592

JaxWsDynamicClientFactory cxf动态客户端

public class PolicyConfirmTest {
public static void main(String[] args) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

org.apache.cxf.endpoint.Client client = dcf.createClient("http://120.55.174.144:7207/PolicyConfirmService?wsdl");  

String requestXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>CA7617F514717D3F8D0FA7285C88FCAE1E7FABAE3CE6703F044B381A25B1219FB791A9C34230B50505C06A3F09D596DAB791A9C34230B50505C06A3F09D596DAD7FCE62A70D9A0AB92893983BB19F7F273C346CCCA776AADB8F87783C97B2BC36F3188D3ADB1C3E2A5D8FD18CA7881CCC83D971FA249A222AF59F2A772387504054E9335FB325F5F76F87593854BA65DABC95190BE91C8DF43C1093C6D76BC6F";

QName name=new QName("http://service.policyconfirm.apps.gateway.sinosoft.com/","policyConfirmRequest");
try {
Object[] objects = client.invoke(name,requestXML);
System.out.println(objects[0]);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
用JaxWsDynamicClientFactory.newInstance() ,client.invoke(name,requestXML)时服务器端收到的请求信息为空。
但是用JaxWsDynamicClientFactory的父类DynamicClientFactory.newInstance(),client.invoke(name,requestXML)时服务器端就能正常收到请求信息。
public static void main(String[] args) {
DynamicClientFactory dcf = DynamicClientFactory.newInstance();

org.apache.cxf.endpoint.Client client = dcf.createClient("http://120.55.174.144:7207/PolicyConfirmService?wsdl");  

String requestXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>CA7617F514717D3F8D0FA7285C88FCAE1E7FABAE3CE6703F044B381A25B1219FB791A9C34230B50505C06A3F09D596DAB791A9C34230B50505C06A3F09D596DAD7FCE62A70D9A0AB92893983BB19F7F273C346CCCA776AADB8F87783C97B2BC36F3188D3ADB1C3E2A5D8FD18CA7881CCC83D971FA249A222AF59F2A772387504054E9335FB325F5F76F87593854BA65DABC95190BE91C8DF43C1093C6D76BC6F";

QName name=new QName("http://service.policyconfirm.apps.gateway.sinosoft.com/","policyConfirmRequest");
try {
Object[] objects = client.invoke(name,requestXML);
System.out.println(objects[0]);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

帮帮小弟看下是什么原因导致的。

  • 写回答

1条回答 默认 最新

  • devmiao 2016-08-04 11:30
    关注

    大家在使用webservice都是希望客户端代码是无侵入的。cxf为此提供了动态客户端

    [java] view plain copy
    DynamicClientFactory objDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();

    Client objClient = objDynamicClientFactory.createClient("http://localhost:8080/cxf_spring/services/hello?wsdl");

    Object[] objReObjects = objClient.invoke("sayHello", new Object[]{"skydream"});

    System.out.println(objReObjects[0]);

    其中一个参数是方法名,后一个参数是调用参数。

    使用这个方法有俩个需要注意的地方。

    1、jdk一定需要使用环境变量配置的(可能classLoader加载原因)

    2、如果服务有接口,且和实现类在不同包中,需要把服务类的命名空间改成接口类的命名空间,不让访问不到方法。如:

    @WebService(endpointInterface="com.skydream.cxf.IHelloService",serviceName="helloService",targetNamespace="http://cxf.skydream.com/")
    public class HelloServiceImpl implements IHelloService

    这样就做到了客户端代码无侵入访问。

    ok!

    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度