`
shangxinlei
  • 浏览: 7938 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cxf 客户端实现

阅读更多

 

下面将介绍基于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

    为了实现CXF客户端的最小化部署,你需要根据项目需求精简jar包列表。例如,如果你的Web服务不涉及安全认证,可以不包含`cxf-rt-ws-security.jar`;如果不需要集群,那么`cxf-rt-features-clustering.jar`也可以省略...

    cxf客户端所需jar包-4个

    标题 "cxf客户端所需jar包-4个" 暗示了这四个JAR文件是Apache CXF框架中用于构建客户端应用程序的基本组件,使得开发者能够方便地调用Web服务。Apache CXF是一个开源的Java框架,它允许创建和消费Web服务,支持多种...

    cxf客户端调用axis服务端流程

    本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    - 配置CXF客户端,添加安全拦截器,如WSS4JOutInterceptor,以添加必要的安全头部。 - 客户端需要提供认证信息,对于基本认证,这可以通过设置HTTP请求头完成;对于WS-Security,可能需要创建和配置`UsernameToken...

    CXF客户端调用例子

    在实际操作时,你需要查看具体的代码来理解CXF客户端和服务端的实现细节。 总结起来,CXF是一个强大的工具,它简化了Web服务的开发和调用,通过其提供的API和工具,开发者可以轻松地创建高性能、高质量的Web服务,...

    CXF客户端添加soapHeader代码 + jar包 + apache-cxf-3.1.15

    以上步骤展示了如何在CXF客户端中添加SOAP Header,这个过程涉及到CXF客户端的配置、自定义Header处理以及服务调用。通过这样的方式,我们可以灵活地控制SOAP请求中的Header信息,满足各种服务交互的需求。记得根据...

    CXF客户端生成器

    【CXF客户端生成器】是基于Apache CXF框架的一个实用工具,主要用于自动生成Java客户端代码,使得开发者可以方便地调用Web服务。Apache CXF是一个开源的SOAP和RESTful Web服务框架,它允许开发者创建和消费各种Web...

    CXF客户端,自动生成方式

    在提供的压缩包文件"WebServiceCxfAutoClient"中,可能包含了自动生成的CXF客户端代码示例,你可以参考这些代码来了解具体的实现细节。学习并熟练掌握CXF客户端的自动生成,对于提高开发效率和代码质量有着显著的...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    apache-cxf-2.7.7以及cxf客户端所需要的jar包

    这个压缩包"apache-cxf-2.7.7以及cxf客户端所需要的jar包"包含了Apache CXF 2.7.7版本及其客户端运行所需的库文件。这些jar包对于创建、部署和消费Web服务至关重要,特别是对于使用命令行生成Web服务客户端的开发者...

    cxf客户端(对象,上传与下载文件支持断点传输)

    本示例着重于CXF客户端如何处理对象参数传递以及支持文件的上传和下载,特别是实现了断点续传功能,这在大文件传输时尤为关键。 【对象传参】: CXF允许通过JAXB(Java Architecture for XML Binding)将Java对象...

    CXF客户端启动过程

    【标题】:“CXF客户端启动过程详解” 【正文】: CXF(Apache CXF)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)。它提供了丰富的API和工具,用于创建Web服务,既可以作为服务器端也可以作为客户端。...

    springboot整合CXF发布webservice和客户端调用

    - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...

    webservice的cxf框架客户端调用所需jar包

    这些JAR包组合在一起,为CXF客户端调用提供了完整的环境,包括XML解析、SOAP消息处理、加密安全、缓存优化、消息传递以及依赖管理等多个方面。在实际项目中,将这些JAR包放入项目的`lib`目录下,确保了所有必要的...

    CXF客户端最少包

    【CXF客户端最少包】指的是在使用Apache CXF框架构建客户端应用时,为了实现基本的SOAP或RESTful服务调用,所需要最小化的依赖集合。在这个描述中,提到了两个核心的JAR文件:cxf-2.7.18.jar和fastjson-1.2.34.jar。...

    CXF 一个完整的webService(整合客户端和服务端)

    整合CXF客户端和服务端** 在实际项目中,可能会同时存在服务端和客户端的开发。为了确保它们之间的兼容性,需要确保服务端发布的WSDL与客户端使用的WSDL一致。CXF提供了丰富的API和工具来简化这一过程。 - 测试:...

    CXF客户端测试需要的最少JAR包

    在标题和描述中提到的“CXF客户端测试需要的最少JAR包”,是指能够支持CXF客户端功能运行的基础依赖集合。 通常,一个基础的CXF客户端测试环境可能包括以下关键组件: 1. **cxf-rt-frontend-jaxws**:这是CXF的...

    cxf客户端出现GBK编码问题解决jar.rar

    当CXF客户端与服务器进行交互时,如果双方对字符编码的理解不一致,可能会导致乱码问题,例如在这里遇到的GBK编码问题。 **GBK编码问题** GBK是GB2312的扩展,包含了大量的中文字符,广泛应用于中国地区。在处理...

Global site tag (gtag.js) - Google Analytics