下面将介绍基于CXF的三种客户端的开发方法,主要用来自己开发的webservice 的测试及调用其他系统开发的服务端。
1.1.纯java 代码调用-最简单
Java 代码调用主要使用纯代码的方式来实现webservice 调用,主要实现类是:JaxWsProxyFactoryBean。
1.1.1. 样例
样例代码:
// 创建WebService客户端代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
// 注册WebService接口
factory.setServiceClass(IAvnTboxChangeTCMP.class);
// 设置WebService地址
factory.setAddress("http://localhost:8080/XXX/services/xxxx");
IAvnTboxChangeTCMP client = (IAvnTboxChangeTCMP) factory.create();
//AVN成功测试
System.out.println("avnTboxChangeService 测试结果:"+client.changeAvnTbox("0", "VIN20121228TEST01", null, "测试维修店5", "王五", "2013-01-11 08:40:00", "AVN_SNTEST0006 DC23", "AVN_SNTEST0006 DC25", null, null, null, null));
在这种方式中,也主要设置接口类和wsdl 地址(上述例子中的红色标注部分)。
1.1.2. 缺点
如果是测试自己开发的webservice端,非常方便,只需要编写前面的代码。
如果是调用别人开发的webservice 端,需要自己通过wsdl2java 生成接口类或是对方提供接口类或是自己根据wsdl编写接口类。
1.2. Java+Spring配置文件-最易扩展
这种实现方式主要是将需要配置的东西从代码抽取到配置文件中,对于调用其他系统开发的webservice 非常有好处。
1.2.1. 样例
配置文件:
<bean id="avnTboxChangeTCMPClient" class="com.saicmotor.mce550.tsgp.tcmp.interf.avnTboxChange.IAvnTboxChangeTCMP" factory-bean="avnTboxChangeTCMPClientFactory" factory-method="create"/>
<bean id="avnTboxChangeTCMPClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.saicmotor.mce550.tsgp.tcmp.interf.avnTboxChange.IAvnTboxChangeTCMP"/>
<property name="address" value="http://localhost:8080/TCMP.Web/services/AvnTboxChangeTCMP"/>
</bean>
Java 代码:
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[] {"com/saicmotor/mce550/tsgp/tcmp/interf/client/avnTboxChange/client-beans.xml"});
IAvnTboxChangeTCMP client = (IAvnTboxChangeTCMP)context.getBean("avnTboxChangeTCMPClient");
String response = client.changeAvnTbox("0", "VIN20121228TEST03", null, "测试维修店2", "李四", "2013-01-08 08:40:00", "AVN_SNTEST0003 DC20", "AVN_SNTEST0003 DC28", null, null, null, null);
这种实现方式只需要加载对应的配置文件,然后通过spring 获取bean 对象的方法,获取到最终的调用客户端实例,然后调用具体的方法就可以了。
1.2.2. 缺点
如果是测试自己开发的webservice端,非常方便,只需要编写前面的代码。
如果是调用别人开发的webservice 端,需要自己通过wsdl2java 生成接口类或是对方提供接口类或是自己根据wsdl编写接口类。
1.3. Wsdl2Java生成-实现最快
下面将介绍cxf 自带的生成工具wsdl2java 的生成方式。
对应的工具目录在CXF_HOME\bin,需要切换到这个目录或是将这个路径配置到环境变量的PATH中。
1.3.1. Wsdl2java 命令
命令:
Wsdl2java -d {x} -p {x} wsdl
举例:
wsdl2java -d p:\client -p com.saicmotor.mce550.tsgp.tcmp.interf.client.generate <http://10.91.241.193:8080/TCMP.Web/services/AvnTboxChangeTCMP?wsdl>
参数说明: -d:指定生成的文件目录。
-p:指定生成代码的包名,很重要,否则会调用时报错。
wsdl:对应的wsdl 文件地址。
上面的代码会生成六个文件:
AvnTboxChangeTCMPImplService.java:对应webservice 的调用实现类。
ChangeAvnTbox.java:输入参数对象
ChangeAvnTboxResponse.java:返回参数对象
IAvnTboxChangeTCMP.java:对应webservice的接口类
ObjectFactory.java:输入输出对象的工厂类
package-info.java:生成的代码的package信息与wsdl 文件的命名空间对应。
生成下面六个文件之后,就可以编写测试类进行测试,举例如下:
public class client {
public static void main(String[] args){
AvnTboxChangeTCMPImplService client = new AvnTboxChangeTCMPImplService();
String respone = client.getAvnTboxChangeTCMPImplPort().changeAvnTbox("0", "VIN20121228TEST01", null, "测试维修店5", "王五", "2013-01-11 08:40:00", "AVN_SNTEST0006 DC23", "AVN_SNTEST0006 DC25", null, null, null, null);
System.out.println(respone);
}
}
1.3.2. Wsdl2java 生成客户端测试类
上面的客户端调用程序是我们自己编写的,当然也可以让wsdl2java 自己生成。
命令:
Wsdl2java -d {xx} -p {x} -client wsdl
举例:
wsdl2java -d p:\client -client -p com.saicmotor.mce550.tsgp.tcmp.interf.client.generate <http://10.91.241.193:8080/TCMP.Web/services/AvnTboxChangeTCMP?wsdl>
通过这个命令会多生成一个文件:
IAvnTboxChangeTCMP_AvnTboxChangeTCMPImplPort_Client.java: 自动生成的测试类。
在这个测试类中,会生成完整的测试代码,只需要进行参数赋值即可。
生成的代码如下:
public final class IAvnTboxChangeTCMP_AvnTboxChangeTCMPImplPort_Client {
private static final QName SERVICE_NAME = new QName("http://avnTboxChange.interf.tcmp.tsgp.mce550.saicmotor.com/", "AvnTboxChangeTCMPImplService");
private IAvnTboxChangeTCMP_AvnTboxChangeTCMPImplPort_Client() {
}
public static void main(String args[]) throws Exception {
URL wsdlURL = AvnTboxChangeTCMPImplService.WSDL_LOCATION;
if (args.length > 0) {
File wsdlFile = new File(args[0]);
try {
if (wsdlFile.exists()) {
wsdlURL = wsdlFile.toURI().toURL();
} else {
wsdlURL = new URL(args[0]);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
AvnTboxChangeTCMPImplService ss = new AvnTboxChangeTCMPImplService(wsdlURL, SERVICE_NAME);
IAvnTboxChangeTCMP port = ss.getAvnTboxChangeTCMPImplPort();
{
System.out.println("Invoking changeAvnTbox...");
java.lang.String _changeAvnTbox_arg0 = "0";
java.lang.String _changeAvnTbox_arg1 = "VIN20121228TEST01";
java.lang.String _changeAvnTbox_arg2 = "";
java.lang.String _changeAvnTbox_arg3 = "测试维修店5";
java.lang.String _changeAvnTbox_arg4 = "王五";
java.lang.String _changeAvnTbox_arg5 = "2013-01-11 08:40:00";
java.lang.String _changeAvnTbox_arg6 = "AVN_SNTEST0006 DC23";
java.lang.String _changeAvnTbox_arg7 = "AVN_SNTEST0006 DC25";
java.lang.String _changeAvnTbox_arg8 = "";
java.lang.String _changeAvnTbox_arg9 = "";
java.lang.String _changeAvnTbox_arg10 = "";
java.lang.String _changeAvnTbox_arg11 = "";
java.lang.String _changeAvnTbox__return = port.changeAvnTbox(_changeAvnTbox_arg0, _changeAvnTbox_arg1, _changeAvnTbox_arg2, _changeAvnTbox_arg3, _changeAvnTbox_arg4, _changeAvnTbox_arg5, _changeAvnTbox_arg6, _changeAvnTbox_arg7, _changeAvnTbox_arg8, _changeAvnTbox_arg9, _changeAvnTbox_arg10, _changeAvnTbox_arg11);
System.out.println("changeAvnTbox.result=" + _changeAvnTbox__return);
}
System.exit(0);
}
}
1.3.3. 缺点
此种生成方式实现最快,几乎不需要编写什么代码,但是生成的类太多,扩展性不是很好,不利于上手。
相关推荐
为了实现CXF客户端的最小化部署,你需要根据项目需求精简jar包列表。例如,如果你的Web服务不涉及安全认证,可以不包含`cxf-rt-ws-security.jar`;如果不需要集群,那么`cxf-rt-features-clustering.jar`也可以省略...
标题 "cxf客户端所需jar包-4个" 暗示了这四个JAR文件是Apache CXF框架中用于构建客户端应用程序的基本组件,使得开发者能够方便地调用Web服务。Apache CXF是一个开源的Java框架,它允许创建和消费Web服务,支持多种...
本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...
- 配置CXF客户端,添加安全拦截器,如WSS4JOutInterceptor,以添加必要的安全头部。 - 客户端需要提供认证信息,对于基本认证,这可以通过设置HTTP请求头完成;对于WS-Security,可能需要创建和配置`UsernameToken...
在实际操作时,你需要查看具体的代码来理解CXF客户端和服务端的实现细节。 总结起来,CXF是一个强大的工具,它简化了Web服务的开发和调用,通过其提供的API和工具,开发者可以轻松地创建高性能、高质量的Web服务,...
【CXF客户端生成器】是基于Apache CXF框架的一个实用工具,主要用于自动生成Java客户端代码,使得开发者可以方便地调用Web服务。Apache CXF是一个开源的SOAP和RESTful Web服务框架,它允许开发者创建和消费各种Web...
这个压缩包"apache-cxf-2.7.7以及cxf客户端所需要的jar包"包含了Apache CXF 2.7.7版本及其客户端运行所需的库文件。这些jar包对于创建、部署和消费Web服务至关重要,特别是对于使用命令行生成Web服务客户端的开发者...
在提供的压缩包文件"WebServiceCxfAutoClient"中,可能包含了自动生成的CXF客户端代码示例,你可以参考这些代码来了解具体的实现细节。学习并熟练掌握CXF客户端的自动生成,对于提高开发效率和代码质量有着显著的...
Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...
以上步骤展示了如何在CXF客户端中添加SOAP Header,这个过程涉及到CXF客户端的配置、自定义Header处理以及服务调用。通过这样的方式,我们可以灵活地控制SOAP请求中的Header信息,满足各种服务交互的需求。记得根据...
本示例着重于CXF客户端如何处理对象参数传递以及支持文件的上传和下载,特别是实现了断点续传功能,这在大文件传输时尤为关键。 【对象传参】: CXF允许通过JAXB(Java Architecture for XML Binding)将Java对象...
【标题】:“CXF客户端启动过程详解” 【正文】: CXF(Apache CXF)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)。它提供了丰富的API和工具,用于创建Web服务,既可以作为服务器端也可以作为客户端。...
- 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...
这些JAR包组合在一起,为CXF客户端调用提供了完整的环境,包括XML解析、SOAP消息处理、加密安全、缓存优化、消息传递以及依赖管理等多个方面。在实际项目中,将这些JAR包放入项目的`lib`目录下,确保了所有必要的...
【CXF客户端最少包】指的是在使用Apache CXF框架构建客户端应用时,为了实现基本的SOAP或RESTful服务调用,所需要最小化的依赖集合。在这个描述中,提到了两个核心的JAR文件:cxf-2.7.18.jar和fastjson-1.2.34.jar。...
整合CXF客户端和服务端** 在实际项目中,可能会同时存在服务端和客户端的开发。为了确保它们之间的兼容性,需要确保服务端发布的WSDL与客户端使用的WSDL一致。CXF提供了丰富的API和工具来简化这一过程。 - 测试:...
在标题和描述中提到的“CXF客户端测试需要的最少JAR包”,是指能够支持CXF客户端功能运行的基础依赖集合。 通常,一个基础的CXF客户端测试环境可能包括以下关键组件: 1. **cxf-rt-frontend-jaxws**:这是CXF的...
当CXF客户端与服务器进行交互时,如果双方对字符编码的理解不一致,可能会导致乱码问题,例如在这里遇到的GBK编码问题。 **GBK编码问题** GBK是GB2312的扩展,包含了大量的中文字符,广泛应用于中国地区。在处理...