`
bufferW
  • 浏览: 18410 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate;

阅读更多
我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate;
1.首先集成Apacha CXF WebService 到 Spring 框架中;
   apache cxf 下载地址:http://people.apache.org/dist/incubator/cxf/2.0.4-incubator/apache-cxf-2.0.4-incubator.zip
  在spring context配置文件中引入以下cxf配置
	<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" />

在web.xml中添加过滤器:
	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>
			org.apache.cxf.transport.servlet.CXFServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>

2.开发服务端WebService接口:
/**
 * WebService接口定义类.
 * 
 * 使用@WebService将接口中的所有方法输出为Web Service.
 * 可用annotation对设置方法、参数和返回值在WSDL中的定义.
 */
@WebService
public interface WebServiceSample {


	/**
	 * 一个简单的方法,返回一个字符串
	 * @param hello
	 * @return
	 */
	String say(String hello);
	
	/**
	 * 稍微复杂一些的方法,传递一个对象给服务端处理
	 * @param user
	 * @return
	 */
	String sayUserName(
			@WebParam(name = "user") 
			UserDTO user);
	
	/**
	 * 最复杂的方法,返回一个List封装的对象集合
	 * @return
	 */
	public 
	@WebResult(partName="o")
	ListObject findUsers();

}

由简单到复杂定义了三个接口,模拟业务需求;
3.实现接口
/**
 * WebService实现类.
 * 
 * 使用@WebService指向Interface定义类即可.
 */
@WebService(endpointInterface = "cn.org.coral.biz.examples.webservice.WebServiceSample")
public class WebServiceSampleImpl implements WebServiceSample {

	public String sayUserName(UserDTO user) {
		return "hello "+user.getName();
	}

	public String say(String hello) {
		return "hello "+hello;
	}

	public ListObject findUsers() {
		ArrayList<Object> list = new ArrayList<Object>();
		
		list.add(instancUser(1,"lib"));
		list.add(instancUser(2,"mld"));
		list.add(instancUser(3,"lq"));
		list.add(instancUser(4,"gj"));
		ListObject o = new ListObject();
		o.setList(list);
		return o;
	}
	
	private UserDTO instancUser(Integer id,String name){
		UserDTO user = new UserDTO();
		user.setId(id);
		user.setName(name);
		return user;
	}
}

4.依赖的两个类:用户对象与List对象
/**
 * Web Service传输User信息的DTO.
 * 
 * 分离entity类与web service接口间的耦合,隔绝entity类的修改对接口的影响.
 * 使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定.
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "User")
public class UserDTO {

	protected Integer id;

	protected String name;

	public Integer getId() {
		return id;
	}

	public void setId(Integer value) {
		id = value;
	}

	public String getName() {
		return name;
	}

	public void setName(String value) {
		name = value;
	}
}

关于List对象,参照了有关JWS的一个问题中的描述:DK6.0 自带的WebService中 WebMethod的参数好像不能是ArrayList 或者其他List
传递List需要将List 包装在其他对象内部才行 (个人理解 如有不对请指出) ,我在实践中也遇到了此类问题.通过以下封装的对象即可以传递List对象.
/**
 * <p>Java class for listObject complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * <complexType name="listObject">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="list" type="{http://www.w3.org/2001/XMLSchema}anyType" maxOccurs="unbounded" minOccurs="0"/>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "listObject", propOrder = { "list" })
public class ListObject {

	@XmlElement(nillable = true)
	protected List<Object> list;

	/**
	 * Gets the value of the list property.
	 * 
	 * <p>
	 * This accessor method returns a reference to the live list,
	 * not a snapshot. Therefore any modification you make to the
	 * returned list will be present inside the JAXB object.
	 * This is why there is not a <CODE>set</CODE> method for the list property.
	 * 
	 * <p>
	 * For example, to add a new item, do as follows:
	 * <pre>
	 *    getList().add(newItem);
	 * </pre>
	 * 
	 * 
	 * <p>
	 * Objects of the following type(s) are allowed in the list
	 * {@link Object }
	 * 
	 * 
	 */
	public List<Object> getList() {
		if (list == null) {
			list = new ArrayList<Object>();
		}
		return this.list;
	}

	public void setList(ArrayList<Object> list) {
		this.list = list;
	}

}

5.WebService 服务端 spring 配置文件 ws-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd"
	default-autowire="byName" default-lazy-init="true">
	
	<jaxws:endpoint id="webServiceSample"
		address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"/>

</beans>

WebService 客户端 spring 配置文件 wsclient-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd"
	default-autowire="byName" default-lazy-init="true">

	<!-- ws client -->
	<bean id="identityValidateServiceClient" class="cn.org.coral.admin.service.IdentityValidateService"
		factory-bean="identityValidateServiceClientFactory" factory-method="create" />

	<bean id="identityValidateServiceClientFactory"
		class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
		<property name="serviceClass"
			value="cn.org.coral.admin.service.IdentityValidateService" />
		<property name="address"
			value="http://88.148.29.54:8080/coral/services/IdentityValidateService"/>
	</bean>
	
</beans>

6.发布到tomcat服务器以后通过以下地址即可查看自定义的webservice接口生成的wsdl:
http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl

7.调用WebService接口的Junit单元测试程序
package test.coral.sample;

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;

import cn.org.coral.biz.examples.webservice.WebServiceSample;
import cn.org.coral.biz.examples.webservice.dto.UserDTO;

public class TestWebServiceSample extends
		AbstractDependencyInjectionSpringContextTests {
	WebServiceSample webServiceSampleClient;

	public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {
		this.webServiceSampleClient = webServiceSampleClient;
	}
	
	@Override
	protected String[] getConfigLocations() {
		setAutowireMode(AUTOWIRE_BY_NAME);
                  //spring 客户端配置文件保存位置
		return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };
	}
	
	public void testWSClinet(){
		Assert.hasText(webServiceSampleClient.say(" world"));
	}
}


分享到:
评论

相关推荐

    Webwork+spring+hibernate集成实例

    SSH(Spring、Struts、Hibernate)或WSH(Webwork、Spring、Hibernate)集成是Java企业级应用开发的常见实践,旨在构建高效、模块化且易于维护的系统。 首先,Webwork是Action-based的MVC框架,它的核心在于Action...

    webwork+hibernate+spring配置包

    使用这个配置包,开发者可以直接导入项目,根据自身需求调整配置,快速启动一个集成了WebWork、Hibernate和Spring的项目。需要注意的是,由于框架和库的更新频繁,这个配置包可能需要根据最新的版本进行升级,以确保...

    webwork+spring+hibernaet

    WebWork、Spring 和 Hibernate 是Java Web开发中三个重要的框架,它们常常被组合使用,构建复杂的业务应用程序。这个压缩包文件的标题"webwork+spring+hibernate"表明它包含了这三个框架的集成示例或者配置文件,...

    WebService 开发大全

    在WSH MVC架构(Webwork2 + Spring + Hibernate)下,CXF可以无缝集成,提供服务层与持久层之间的交互。Hibernate负责数据库操作,Spring管理依赖和事务,而Webwork2或类似的MVC框架处理视图和控制逻辑。这种架构...

    wsh.inf下载-wsh.inf下载-wsh.inf下载

    综上,用户可能在尝试修复与WSH相关的安装问题,或者需要使用WSH进行脚本自动化时,遇到了需要下载和使用WSH.inf的情况。在处理此类问题时,了解WSH的工作原理、.INF文件的作用以及如何正确使用Windows Installer ...

    wsh.inf 下载

    尽管WSH在多个版本的Windows中都有应用,但在这里特别提到了Win7,可能是因为某些用户在使用Windows 7时遇到了VBS运行问题,或者`wsh.inf`文件在该操作系统上的使用有特定的注意事项。 **详细知识点:** 1. **...

    VBScript+JavaScript+Dhtml+SQL+WSH+DOM+XML+CSS参考手册大全.7z

    css.chm DHTML 手册.chm dom.chm Microsoft Windows脚本技术.CHM xmlhttp.CHM XML指南.chm 微软JavaScript手册js.chm 微软Sql参考手册sql.chm 微软Vbscript手册vbs.chm 配色 .chm

    网络安全编程之wsh

    在实际操作中,我们还可以通过编写示例代码,演示如何使用WSH进行安全的文件操作、网络通信以及系统管理,同时展示如何防止常见的攻击手段,如跨站脚本(XSS)和命令注入等。 通过以上讨论,我们可以看出,网络安全...

    wsh.inf下载

    wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载wsh.inf下载 wsh.inf下载 wsh.inf下载 wsh.inf下载

    WSH用户手册,Windows 脚本宿主 (WSH) 是一种 Windows 管理工具

    Windows 脚本宿主(WSH)是Microsoft提供的一种强大的系统管理工具,它允许用户使用脚本语言(如VBScript和JScript)来自动化日常任务,管理和配置Windows操作系统。WSH的核心功能在于将脚本与操作系统接口集成,为...

    wsh.inf下载下载

    【标题】"wsh.inf下载下载"涉及到的核心知识点是Windows Script Host(WSH)和INF配置文件。 Windows Script Host(WSH)是微软提供的一种在Windows操作系统上运行脚本的环境。它支持VBScript和JScript等脚本语言,...

    Windows Script Host (WSH) 脚本对象编程

    ### Windows Script Host (WSH) 脚本对象编程知识点概览 #### 1. Windows Script Host (WSH) 简介 - **背景**:在Windows 98之前的版本,缺乏有效的自动化手段,例如批处理文件仅能执行简单的MS-DOS命令,功能有限...

    跟我从头学WSH跟我从头学WSH

    跟我从头学WSh跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar跟我从头学WSH.rar

    WSH用户手册 WSH用户手册 WSH用户手册

    用户手册详细介绍了如何利用WSH来编写、调试和管理脚本,下面我们将深入探讨WSH的核心概念和功能。 1. **脚本引擎** - VBScript:一种基于Visual Basic的简单脚本语言,常用于WSH。 - JScript:微软的JavaScript...

    WSH 实用技术与应用

    2. **跨平台**:Jscript可以在多种微软产品中使用,如IE浏览器、WSH等。 3. **动态类型**:与Vbscript一样,Jscript也采用动态类型,变量无需预定义类型。 4. **函数和对象**:Jscript支持函数式编程,拥有丰富的...

    WSH VBScript

    标题:WSH VBScript 描述:本文档详细介绍了Windows Script Host (WSH)下的VBScript使用方法,并提供了多个实例帮助理解。以下是对该文档中提到的关键知识点的详细解析。 ### 知识点一:WSH简介 Windows Script ...

    wsh.inf系统文件

    wsh.inf

Global site tag (gtag.js) - Google Analytics