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

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 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码