CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架。文中所使用到的软件版本:Java 1.8.0_191、CXF 3.2.11。

1、准备

参考Java调用WebService方法总结(1)--准备工作

2、调用

2.1、Client方式

public static void client(String param) {
try {
JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
//DynamicClientFactory factroy = DynamicClientFactory.newInstance();
Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
Object[] results = client.invoke("toTraditionalChinese", param);
System.out.println("client方式:" + results[0]);
} catch (Exception e) {
e.printStackTrace();
}
}

该方式需要用到如下jar文件,少jar文件会报各种各样的错误。

cxf-core-3.2.11.jar、cxf-rt-bindings-soap-3.2.11.jar、cxf-rt-databinding-jaxb-3.2.11.jar、cxf-rt-frontend-jaxws-3.2.11.jar、cxf-rt-frontend-simple-3.2.11.jar、cxf-rt-transports-http-3.2.11.jar、cxf-rt-wsdl-3.2.11.jar、stax2-api-3.1.4.jar、woodstox-core-5.0.3.jar、xmlschema-core-2.2.4.jar、wsdl4j-1.6.3.jar。这些jar文件在下载的CXF包里都有。

2.2、wsdl2java方式

2.2.1、根据wsdl生成代码

执行命令:

%CXF_HOME%/bin/wsdl2java.bat -p com.inspur.ws.cxf -client http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl

-p 指定包名  -client 生成客户端调用样例

更多的参数说明详见官方文档:http://cxf.apache.org/docs/wsdl-to-java.html

2.2.1、用生成代码的调用WebService

public static void wsdl2java(String param) {
com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
String reuslt = port.toTraditionalChinese(param);
System.out.println("wsdl2java方式:" + reuslt); com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
reuslt = port2.toTraditionalChinese(param);
System.out.println("wsdl2java方式2:" + reuslt);
}

2.3、Simple Frontend Client Proxy方式

这种方式需要服务端是CXF用Simple Frontend发布的WebService。这里用官网的demo来演示。

2.3.1、创建服务端

a、接口

package com.inspur.ws.cxf.server;

public interface HelloWorld {
String sayHi(String text);
}

b、实现类

package com.inspur.ws.cxf.server;

public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
return "Hello " + text;
}
}

c、发布服务

package com.inspur.ws.cxf.server;

import org.apache.cxf.frontend.ServerFactoryBean;

public final class Server {
private Server() {
} public static void startServer() throws Exception {
HelloWorldImpl helloworldImpl = new HelloWorldImpl();
ServerFactoryBean svrFactory = new ServerFactoryBean();
svrFactory.setServiceClass(HelloWorld.class);
svrFactory.setAddress("http://localhost:9000/Hello");
svrFactory.setServiceBean(helloworldImpl);
svrFactory.create();
} public static void main(String args[]) throws Exception {
startServer();
System.out.println("Server ready..."); Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}

发布服务时会用到好多jar文件,如果少jar文件会报各种奇怪的错误;可以把%CXF_HOME%/lib下的jar文件都拿过来,通过不断删除一些jar文件然后重启发布服务看有没有问题的方法来删除多余的jar文件。

2.3.2、客户端

public static void clientProxyFactoryBean (String param) {
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld serice = (HelloWorld) factory.create();
System.out.println(serice.sayHi(param));
}

2.4、调用完整代码

package com.inspur.ws;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import com.inspur.ws.cxf.server.HelloWorld; /**
* CXF调用WebService
*
*/
public class CXF {
/**
* Client方式
* @param param
*/
public static void client(String param) {
try {
JaxWsDynamicClientFactory factroy = JaxWsDynamicClientFactory.newInstance();
//DynamicClientFactory factroy = DynamicClientFactory.newInstance();
Client client = factroy.createClient("http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl");
Object[] results = client.invoke("toTraditionalChinese", param);
System.out.println("client方式:" + results[0]);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* wsdl2java方式
* @param param
*/
public static void wsdl2java(String param) {
com.inspur.ws.cxf.TraditionalSimplifiedWebService service = new com.inspur.ws.cxf.TraditionalSimplifiedWebService();
com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port = service.getTraditionalSimplifiedWebServiceSoap();
String reuslt = port.toTraditionalChinese(param);
System.out.println("wsdl2java方式:" + reuslt); com.inspur.ws.cxf.TraditionalSimplifiedWebServiceSoap port2 = service.getTraditionalSimplifiedWebServiceSoap12();
reuslt = port2.toTraditionalChinese(param);
System.out.println("wsdl2java方式2:" + reuslt);
} /**
* Simple Frontend Client Proxy方式
* @param param
*/
public static void clientProxyFactoryBean (String param) {
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld serice = (HelloWorld) factory.create();
System.out.println("Simple Frontend Client Proxy方式:" + serice.sayHi(param));
} public static void main(String[] args) {
client("小学");
wsdl2java("大学");
clientProxyFactoryBean("小学");
}
}

Java调用WebService方法总结(7)--CXF调用WebService的更多相关文章

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

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

  2. Java调用WebService方法总结(5)--Axis2调用WebService

    Axis2是新一点Axis,基于新的体系结构进行了全新编写,有更强的灵活性并可扩展到新的体系结构.文中demo所使用到的软件版本:Java 1.8.0_191.Axis2 1.7.9. 1.准备 参考 ...

  3. Java调用WebService方法总结(4)--Axis调用WebService

    Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...

  4. Java调用WebService方法总结(3)--wsimport调用WebService

    wsimport是JDK自带的把WSDL转成Java的工具,可以很方便的生成调用WebService的代码.文中所使用到的软件版本:Java 1.8.0_191. 1.准备 参考Java调用WebSe ...

  5. Java调用WebService方法总结(2)--JAX-WS调用WebService

    用JAX-WS(Java API for XML Web Services)调用WebService不需要引入其他框架,都是JDK自带的:文中所使用到的软件版本:Java 1.8.0_191.Dom4 ...

  6. 既然 start() 方法会调用 run() 方法,为什么我们调用 start() 方法,而不直接调用 run() 方法?

    当你调用 start() 方法时,它会新建一个线程然后执行 run() 方法中的代码.如果直接调用 run() 方法,并不会创建新线程,方法中的代码会在当前调用者的线程中执行

  7. JAVA学习笔记--方法中的参数调用是引用调用or值调用

    文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...

  8. Java调用WebService方法总结(1)--准备工作

    WebService是一种跨编程语言.跨操作系统平台的远程调用技术,已存在很多年了,很多接口也都是通过WebService方式来发布的:本系列文章主要介绍Java调用WebService的各种方法,使 ...

  9. java基础:方法的定义和调用详细介绍,方法同时获取数组最大值和最小值,比较两个数组,数组交换最大最小值,附练习案列

    1. 方法概述 1.1 方法的概念 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程成为方法定义 方法创建后并不是直接可 ...

随机推荐

  1. 阿里云服务器在控制台配置网页强制https访问

    最近接触到一个新的网站,网站的访问方式,是http, 因此在浏览器打开的时候老是显示不安全.因此要配置https访问. 首先,先说明服务器是在阿里云的,域名也是阿里云的. 方法一 1 首先在阿里云的c ...

  2. 集成了SSM框架的系统怎么做测试?

    1.首先在测试文件夹下新建一个测试基类BaseTest BaseTest中的代码如下: package wbl_ssm_blog.mapper; import org.junit.Test; impo ...

  3. axios跨域请求报错:Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

    在做项目时,用到axios,数据用post提交时,老是报错,错误提示为: Access to XMLHttpRequest at 'http://127.0.0.1:3000/api/add' fro ...

  4. 第07组 Beta冲刺(3/5)

    队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器,目前没什么进展 展示GitHub当日代码/文档签入记录:(组内共用,已询问 ...

  5. 为什么用ls和du显示出来的文件大小有差别?【转】

    在使用Linux ls命令查看文件大小时,发现文件很大,足有100个G,而使用du命令查看则不超过10个G. [root@shanghai devicemapper]# ls -l 总用量 -rwxr ...

  6. java String 转Json报错 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim

    这个问题就是缺少jar包依赖!!! java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean 缺少commons-be ...

  7. Java 动态调试技术原理及实践 【基本功】Java动态追踪技术探究

    https://mp.weixin.qq.com/s/ZlNcvwJ_swspifWTLHA92Q https://mp.weixin.qq.com/s/_hSaI5yMvPTWxvFgl-UItA

  8. NFS的安装与使用

    一.服务器端: 1.1安装NFS服务: #执行以下命令安装NFS服务器, #apt会自动安装nfs-common.rpcbind等13个软件包 sudo apt install nfs-kernel- ...

  9. echarjs—阿里历年双十一销售数据统计及预测

    阿里双十一数据统计 <!DOCTYPE html> <html> <head> <title>阿里历年双十一销售数据统计及预测</title> ...

  10. [LeetCode] 199. Binary Tree Right Side View 二叉树的右侧视图

    Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...