利用cxf开发WebService

利用cxf开发WebService

1.什么是CXF

Apache CXF =Celtix + Xfire

支持多种协议:

?    SOAP1.1,1,2

?    XML/HTTP

?    CORBA(Common ObjectRequest Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)

?    并可以与Spring进行快速无缝的整合

?    灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。

2.安装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%\lib\cxf-manifest.jar;.\build\classes

注意:

1、为什么要用到ant这个工具呢?Ant做为一种工具已经广泛被使用,并且历史悠久。使用ant的内置命令,可以编译java源文件(javac),运行java文件(java),给class文件打包(jar、war、ear),也可以创建(mkdir)、删除(del)、拷贝(copy),甚至可以使用ant执行sql文件。由于ant是用xml语言写成的文件,并取默认名为build.xml文件。所以,今后大家应该在见到名为build.xml文件时知道这是一个ant的文件。

2、默认在Eclipse和MyEclipse的对ant有内建的支持。可以在MyEclipse中任意项目中建立一个文件叫build.xml文件,你会发现它有不同的图标(上面有个小蚂蚁)。

3. 用ANT来构造第一个CXF示例

在cxf_home\samples\java_first_pojo目录下启动服务器:

?    在命令行模式下进入上述目录:

?    执行 以下命令 ant server

在同一目录下打开新命令行窗口运行:

?    ant client

注意:

1、java_frist_pojo是位于samples下的最简单的一个项目。

2、ant server,是通过ant来执行build.xml配置文件中的一段代码,就的工作就是编译Java类并启动服务。

3、ant client是访问服务。

4、让我们一块来看一下它的源代码。由三个类组成:接口HelloWorld,实现类HelloWorldImpl和服务发布类Server

     在另一端则只有一个Client.java文件。

执行ant 是重新编译。

Ant server是启动服务。

Ant client是运行客户端。

Ant deploy –Dtomcat=true

4. 用ANT将它发布到Tomcat服务器上

1、执行ant clean清除以前生成的代码

2、执行ant war打包此应用。

3、执行ant deploy –Dtomcat=true将项目发布到tomcat的服务器上。

4、启动tomcat服务器

5、打开IE的地址栏输入:

http://localhost:9999/helloworld/services/hello_world?wsdl

或:http://localhost:9999/helloworld/services

6、在命令行执行:

?    ant client-servlet –Dbase.url=http://localhost:9999

?    或在MyEclipse的WebServiceExplorer中访问这个WebService

7、停止tomcat服务器。

8、卸载应用:ant undeploy –Dtomcat=true

9、清空项目:ant clean

5. 在Eclipse中开发CXF的JavaSE应用

导入CXF中的 所有jar文件。可以通过WACH_JARS来观察各jar文件的用途。

注意:

1、记得调整你的jdk版本为jdk1.6.0_24.

2、将所有cxf的jar包拷贝到项目中来。添加到classpth中。

3、在开发之前可以先阅读CXF_HOME\lib\WATCH_JARS文件,分析jar文件之间的依赖关系

6.CXF发布服务的类

用两个不同的类发布应用:

ServerFactoryBean   -- FacotryBean

JaxWsServerFactoryBean(建议使用此类)

7.服务与客户端类调用原则图解

8.使用ServerFactoryBean发布服务

使用ServerFactoryBean发布服务。

使用CXF发布一个服务,与JDK6发布一个服务完全不同

?    * 即使是不使用@WebService注解,一样可以发布成功

?    * 即使此类没有对外公布的方法一样可以发布成功

9.使用ClientProxyFactoryBean客户端调用

使用ServerFactoryBean发布服务以后,在没有接口的情况下,可以使用wsimport生成的客户端代码调用成功。

但如果要使用ClientProxyFactoryBean客户端去调用服务器,则必须要先在服务器端创建一个接口。(一直以来,Spring都要求面向接口编程,而cxf与Spring能很好的整合,也就在此。),所以,必须要重写服务器端的代码。这将导致刚才使用wsimport生成的调用代码失效。

同时,ClientProxyFactoryBean由于要用到CXF环境,所以要导入CXF的所有包。

同时,如果是在本项目中调用,则可以直接使用本项目的接口。

如果在其他项目中调用,仍然需wsimport生成的类,但只需要一个接口。

10.使用JaxWsServerFactoryBean发布服务: (建议使用此类)

JaxWsServerFactoryBean是ServerFactoryBean的子类,也是功能扩展类。

但在CXF的API文档中没有提供此类API,请通过查看源代码的方式获取此类的帮助。

此类,必须要在被发布为服务的类上添加@WebService注解,如果不加注解,虽然不出错,但也不会对外暴露任何方法。

      使用此类生成的wsdl文件更加规范。

11.使用CXF的类发布一个服务

创建成功以后,使用Wsimport生成的客户端代码,同样可以调用成功

在使用CXF发布服务时,需要首先写一个接口,用以声明服务类型。这有点类似于Spring中的服务层的实现

12.使用JaxWsProxyFactoryBean客户端调用

此调用过程与ClientProxyFactoryBean的要求一样,也必须要拥有一个接口。

此时,仍然可以使用wsimport生成接口,在其他项目的调用。

在另一个项目中调用:

13.wsdl2java生成客户代码

在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。

此工具位于cxf_home/bin目录下。参数与wsimport有所不同。

它包含以下参数:

?    -d参数,指定代码生成的目录。

?    -p参数,指定生成的新的包结构。

需要说明的是,由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。

在命令行执行:

              wsdl2java –d .http://127.0.0.1:6666/helloworld?wsdl

调用端代码:

14.给服务添加消息拦截器

LoggingInInterceptor– 信息输入时的拦截器 –请求

LoggingOutInterceptor–信息输出时的拦截器-响应

给服务器添加拦截器,类似于使用TCP/IP Monitor来捕获SOAP消息的过程。

15.使用JavaScript也可以访问WebServie

jQuery访问WebService.

?    1、在本域准备jquery.js(由于jquery对跨域的请求做了限制,所以jquery仅限于在本域中使用。但为了快速解析XML文件,仍然可以使用jquery当成解析xml文件的工具。)。

?    2、通过js发起ajax请求。

 

 

 

 

 

 

 

 

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。