cxf webservice
什么是CXF:
Apache CXF = Celtix + Xfire ????????????支持多种协议: ????????????SOAP1.1,1.2 ????????????XML/HTTP ????????????CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。????????????????????C,c++,C#)? ????????????并可以与Spring进行快速无缝的整合 ????????????灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。 安装CXF的其他支持项目:
Ant Tomcat 并设置以下环境变量: ????????????JAVA_HOME ? ????????????CXF_HOME ????????????ANT_HOME ????????????CATALINA_HOME ????????????Path = %JAVA_HOME%bin;%CXF_HOME%bin;%CATALINA_HOME%bin;%ANT_HOME%bin ????????????CLASSPATH=.;%CXF_HOME%libcxf-manifest.jar;.buildclasses 在Eclipse中开发CXF的JavaSE应用:
导入CXF中的 所有jar文件。可以通过WACH_JARS来观察各jar文件的用途。 建立好之后的项目如图所示: CXF发布服务的类:
用两个不同的类发布应用: ????????????ServerFactoryBean ? -- FacotryBean ????????????JaxWsServerFactoryBean(建议使用此类) 使用ServerFactoryBean发布服务: ????
使用ServerFactoryBean发布服务以后,在没有接口的情况下,可以使用wsimport生成的客户端代码调用成功。 但如果要使用ClientProxyFactoryBean客户端去调用服务器,则必须要先在服务器端创建一个接口。(一直以来,Spring都要求面向接口编程,而cxf与Spring能很好的整合,也就在此。),所以,必须要重写服务器端的代码。这将导致刚才使用wsimport生成的调用代码失效。 同时, ClientProxyFactoryBean由于要用到CXF环境,所以要导入CXF的所有包。 同时,如果是在本项目中调用,则可以直接使用本项目的接口。 如果在其他项目中调用,仍然需wsimport生成的类,但只需要一个接口。 使用JaxWsServerFactoryBean发布服务: (建议使用此类)
????JaxWsServerFactoryBean是ServerFactoryBean的子类,也是功能扩展类。但在CXF的API文档中没有提供此类API,请通过查看源代码的方式获取此类的帮助。此类,必须要在被发布为服务的类上添加@WebService注解,如果不加注解,虽然不出错,但也不会对外暴露任何方法。使用此类生成的wsdl文件更加规范。
使用JaxWsProxyFactoryBean客户端调用:
此调用过程与ClientProxyFactoryBean的要求一样,也必须要拥有一个接口。 此时,仍然可以使用wsimport生成接口,在其他项目的调用。 规范的做法应该是先书写一个接口,如下:
wsdl2java生成客户代码:
在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。 先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。 此工具位于cxf_home/bin目录下。参数与wsimport有所不同。 它包含以下参数: -d参数,指定代码生成的目录。 -p参数,指定生成的新的包结构。 需要说明的是,由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。 在命令行执行: wsdl2java –d . http://127.0.0.1:6666/helloworld?wsdl 调用端代码: 使用JavaScript也可以访问WebServie:
以上均是非WEB的开发下面介绍基于web的cxf
由于cxf的web项目已经集成了Spring所以,cxf的服务类都是在spring的配置文件中完成的。以下是步骤: 第一步:建立一个web项目。 第二步:准备所有jar包。将cxf_homelib项目下的所有jar包全部copy到新项目的lib目录下,里面已经包含了spring3.0的jar包。 第三步:在web.xml中配置cxf的核心servlet,CXFServlet。 第四步:创建(最好是Copy)cxf-servlet.xml文件。这是一个spring的配置文件。 cxf-servlet.xml:
web.xml
这是我的包结构:
????????????在地址栏访问: Java项目代码调用服务:
使用纯Java项目调用 1、根据客户端生成的代码来调用。(优选这种方式)请先生成然后在任意的Java项目中调用 。 2、客户端只拥有一个接口,使用JaxWsProxyFactoryBean来调用。 因为以下使用了JaxWsProxyFactoryBean,所以,仍然需要CXF的环境,而使用此环境就会造成Jar文件的大量冗余,所以大家要谨慎选择(一下的地址是随便贴的)。 在Spring项目中,通过配置文件调用:
以下是使用Spring的配置文件调用: 新建立一个Java项目,并加载cxf的所有包。 只需要生成的接口文件. 在classpath下新建立一个ClientBeans.xml文件. 优点与缺点: ????????此种情况,适合于一个Javaweb项目已经集成了Spring。并希望通过CXF配置的方式调用Web服务。 ????????此种情况,仍然需要导入CXF的大量jar包。 ????????这种情况也存在一定优点,如可以将外部的Web服务通过配置文件注入(DI)到Action类中。 结构图如下(带接口的方式): ClientBeans.xml文件的内容:
以下是调用代码:
通过JS来调用WebService:
|