当前位置: 代码迷 >> Web前端 >> gsoap CXF2.7.5 ssh vc++ webservice应用范例(四)
  详细解决方案

gsoap CXF2.7.5 ssh vc++ webservice应用范例(四)

热度:554   发布时间:2013-10-08 17:02:59.0
gsoap CXF2.7.5 ssh vc++ webservice应用实例(四)

源码下载地址: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的值就是实例对象的名称。

到这里,整个测试过程已经全部完成。如果哪位朋友有好的方法欢迎交流!

  相关解决方案