源码下载地址:http://download.csdn.net/detail/biboheart/6314985
前面我们已经创建了c++服务端和客户端,CXF结合spring的服务端。现在让我们来完成CXF结合spring的客户端。
建立Dynamic Web Project
project name:CXFClientDemo完成ssh的项目建设。
此时项目中结构如图:
web.xml的内容同(一)中建服务器的配置。
在org.biboheart.action中有个UserAction类,类中有个方法get()。在ssh完成后,可以通过正确执行action请求。我这里请求:http://localhost:8080/CXFClientDemo/get.action转向index.jsp
接下去,我们要在请求get.action的时候,action去请求webservice服务。
新建org.biboheart.webservice包。
包中新建一个类,类名:HelloWorldClient。
HelloWorldClient.java中的内容
package org.biboheart.webservice; import javax.jws.WebParam; import javax.jws.WebService; @WebService(targetNamespace="http://webservice.biboheart.org/") public interface HelloWorldClient { public String sayHello(@WebParam(name = "name")String name); }
注意,这是一个接口类,但是不用去实现它。
在spring中装配客户端,部分配置如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <context:annotation-config /> <context:component-scan base-package="org.biboheart" /> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:client id="helloWorldClient" serviceClass="org.biboheart.webservice.HelloWorldClient" address="http://localhost:9001/CXFServerDemo/webServices/HelloWorld"/>
以上是前一部分的配置,serviceClass值为前面建的接口类。address为服务的地址,端口根据服务监听的端口。这里我面请求c++中gsoap的服务。同(三)中c++客户端中的地址。
修改action中的代码。
package org.biboheart.action; import org.biboheart.webservice.HelloWorldClient; public class UserAction extends BaseAction{ private static final long serialVersionUID = 1L; private HelloWorldClient helloWorldClient; public String get(){ System.out.println(helloWorldClient.sayHello("biboheart")); return SUCCESS; } public HelloWorldClient getHelloWorldClient() { return helloWorldClient; } public void setHelloWorldClient(HelloWorldClient helloWorldClient) { this.helloWorldClient = helloWorldClient; } }
在这里,有一个类的成员对象
private HelloWorldClient helloWorldClient;前面建立的接口类,变量名是spring中配置的id
写好get set方法。
这样,在方法中就可以直接使用webservice的方法了。
System.out.println(helloWorldClient.sayHello("biboheart"));这里测试请求服务端,所以只是在控制台中打印出请求得到的结果。能在控制台中输出结果,说明请求webservice服务端成功。
现在再访问get.action,返回值
这里测试的是请求C++的服务。要先运行(二)中创建程序。
spring的注入有时候比较难理解,就像这里的helloWorldClient,怎么就可以直接执行了呢。这个需要了解,spring如何注入struts?在这里不详说这个了。
<jaxws:client id="helloWorldClient" serviceClass="org.biboheart.webservice.HelloWorldClient" address="http://localhost:9001/CXFServerDemo/webServices/HelloWorld"/>主要是这个配置,其实这也是一个Bean,spring中装配的Bean已经由spring帮忙new出来了,struts中通过get方法就可以从spring中获取到这个对象。既然已经是个实例对象,那直接执行就可以了。这里的id的值就是实例对象的名称。
到这里,整个测试过程已经全部完成。如果哪位朋友有好的方法欢迎交流!