使用apache.cxf调用webservice接口

1.引入jar包

<dependency>
     <groupId>org.apache.cxf</groupId>
     <artifactId>cxf-rt-frontend-jaxws</artifactId>
     <version>3.3.4</version>
</dependency>
<dependency>
     <groupId>org.apache.cxf</groupId>
     <artifactId>cxf-rt-transports-http</artifactId>
     <version>3.2.2</version>
</dependency>

 

2.使用动态调用

2.1创建公共方法返回Client 

private ClassLoader cl = Thread.currentThread().getContextClassLoader();
private Client getClientByUrl(String url){
    Thread.currentThread().setContextClassLoader(cl);
    JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
    Client client = dcf.createClient(url);
    return client;
}

2.2简单入参调用实例

"getExUserList"为方法名

 beginDate, endDate, begin, end都为入参

public JSONArray getGwallUserInfo(String begin, String end){
    Client client = getClientByUrl(gwallUrl);
    String beginDate = "1900-01-01";
    String endDate = "2030-01-01";
    try {
        JSONArray getExUserList =JSONArray.parseArray(JSONObject.toJSONString(client.invoke("getExUserList", beginDate, endDate, begin, end)[0]));
        return getExUserList;
    } catch (Exception e) {
        e.printStackTrace();
    }
     return null;
}

 

3.复杂入参调用实例

"xxx.xx.xxx.AccessToken":为类名,路径需和服务端保持一直(下文有查看类路径方法)

"setApplication","setToken"为类属性。

public JSONArray getUserByOrg(String orgId){
    ObjectMapper om = new ObjectMapper();
    Client client = getClientByUrl(gwallUrl);
    try {
        String paramsStr = "";
        // 加载类为服务端自定义对象命名空间
        Object accessToken =Thread.currentThread().getContextClassLoader().loadClass("xxx.xx.xxx.AccessToken").newInstance();
        // 调用set方法设置参数
        Method setAccNbr = accessToken.getClass().getMethod("setApplication", String.class);
        setAccNbr.invoke(accessToken, gwApplication);
        Method setToke = accessToken.getClass().getMethod("setToken", String.class);
        setToke.invoke(accessToken, gwToken);
        paramsStr = om.writeValueAsString(accessToken);
        JSONArray getExUserList =JSONArray.parseArray(JSONObject.toJSONString(client.invoke(userByOrgUrl,accessToken, orgId)[0]));
        return getExUserList ;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

 

4.cxf工具的用法(可以用来查看路径)

4.1下载cxf包

官网地址:http://cxf.apache.org/download.html

百度网盘:链接:https://pan.baidu.com/s/1OMYkXfUYoqs6l81EYBWZAA  提取码:heeb 

4.2解压缩包,通过cmd命令进入到bin目录下(cd cxf\bin的路径)

命令省略

4.3使用wsdl2java命令生成客户端代码

执行命令:wsdl2java -p org.logink.ws -d f:\logink\src -all E:\wsdl3.1-credit\LogisticsCreditService\LogisticsCreditService.wsdl

wsdl2java用法: wsdl2java -p com -d src -all  aa.wsdl 

-p  指定其wsdl的命名空间,也就是要生成代码的包名: 

-d  指定要产生代码所在目录 

-client 生成客户端测试web service的代码 

-server 生成服务器启动web  service的代码 

-impl 生成web service的实现代码 

-ant  生成build.xml文件 

-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file. 

 

查看路径:

执行wsdl2java命令时不指定生成代码的包名及-p ,则默认路径j就是服务端类路径

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Apache CXF是一个开源的WebService框架,可以帮助用户快速、简便地开发和部署WebService应用程序。它提供了多种方式来调用WebService接口,下面介绍几种常用的方式: 1. 使用JAX-WS API:CXF实现了JAX-WS API,可以直接使用JAX-WS提供的API来调用WebService。示例代码如下: ```java HelloWorldService service = new HelloWorldService(); HelloWorld port = service.getHelloWorldPort(); String result = port.sayHello("CXF"); ``` 2. 使用代理方式:CXF可以根据WebService WSDL文件自动生成代理类,然后通过调用代理类的方法调用WebService接口。示例代码如下: ```java JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(HelloWorld.class); factory.setAddress("http://localhost:8080/HelloWorld"); HelloWorld client = (HelloWorld) factory.create(); String result = client.sayHello("CXF"); ``` 3. 使用Spring配置文件:CXF提供了Spring配置文件方式来实现WebService接口调用。用户可以在Spring配置文件中配置WebService客户端,然后通过Spring容器来获取WebService客户端实例。示例代码如下: ```xml <jaxws:client id="helloClient" serviceClass="com.example.HelloWorld" address="http://localhost:8080/HelloWorld"/> ``` ```java ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); HelloWorld client = (HelloWorld) context.getBean("helloClient"); String result = client.sayHello("CXF"); ``` 以上是几种常用的调用WebService接口的方式,可以根据具体情况选择适合自己的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cc_南柯一梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值