`
erichua
  • 浏览: 514358 次
  • 性别: Icon_minigender_2
  • 来自: 远方
社区版块
存档分类
最新评论

快速使用Spring 2.5 和 Apache CXF 2.0, 以前的Xfire创建webServ

阅读更多
在这个Demo中我如何使用Spring 2.5 和 Apache CXF 2.0建立和运行一个web service。我非常喜欢CXF它同时支持WSDL-first 和 Java-first web service 开发。这个示例中使用的是Java-first web service。
项目SETUP
1.去CXF下一个Apache CXF,现在已经是2.1.2了。官方网站上有一section of the CXF user documentation that deals with writing a service with Spring,对新手应该有一些用。在那个示例中只是返回了一个string. 我们试着返回一些复杂的内容,试着使用databinding。
项目需要的JAR
CXF itself
• cxf.jar
CXF dependencies
• commons-logging-1.1.jar
• geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
• geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
• geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
• geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
• geronimo-stax-api_1.0_spec-1.0.jar
• geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
• jaxb-api-2.0.jar
• jaxb-impl-2.0.5.jar
• jaxws-api-2.0.jar
• neethi-2.0.2.jar
• saaj-api-1.3.jar
• saaj-impl-1.3.jar
• wsdl4j-1.6.1.jar
• wstx-asl-3.2.1.jar
• XmlSchema-1.3.2.jar
• xml-resolver-1.2.jar
Aegis dependencies
jdom-1.0.jar Aegis databinding 需要
jaxen-1.1.1.jar
cxf-rt-databinding-aegis-2.1.2.jar
Spring dependencies
这个就参照常用spring配置了
下面废话少说,开始
创建一个表Vendor的Maintains
Create the object model
内容和HelloWorld差不多,但使用了一些XMl Binding的能力


import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Type;



@Entity
public class Vendor extends AbstractBaseEntity {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8346265790105564327L;

	private String VendorID;

	private String EngName;

	private String ChnName;

	private String Street1;

	private String Street2;

	private String City;

	private String ProvinceID;

	private String Zip;

	private String PoTel;

	private String PoFax;

	private String PoContact;

	private String PoEmail;

	private String ApTel;

	private String ApFax;

	private String ApContact;

	private String ApEmail;

	private String ProductContract;

	private Integer MinOrderQty;

	private BigDecimal MinOrderAmount;

	private Integer Msi;

	private String Language;

	private String Status;

	private Integer PoSentBy;

	private String ApTerms;

	private String FobCode;

	private String ShipVia;

	private String VendorType;

	private Date ChgTime;

	private String ChgBy;

	@Id
	
	public String getVendorID() {
		return VendorID;
	}

	public void setVendorID(String vendorID) {
		this.VendorID = vendorID;
	}


	public String getApContact() {
		return ApContact;
	}

	public void setApContact(String contact) {
		ApContact = contact;
	}


	public String getApEmail() {
		return ApEmail;
	}

	public void setApEmail(String email) {
		ApEmail = email;
	}


	public String getApFax() {
		return ApFax;
	}

	public void setApFax(String fax) {
		ApFax = fax;
	}


	public String getApTel() {
		return ApTel;
	}

	public void setApTel(String tel) {
		ApTel = tel;
	}


	public String getApTerms() {
		return ApTerms;
	}

	public void setApTerms(String terms) {
		ApTerms = terms;
	}

	public String getChgBy() {
		return ChgBy;
	}

	public void setChgBy(String chgBy) {
		this.ChgBy = chgBy;
	}

	public Date getChgTime() {
		return ChgTime;
	}

	public void setChgTime(Date chgTime) {
		this.ChgTime = chgTime;
	}

	public String getChnName() {
		return ChnName;
	}

	public void setChnName(String chnName) {
		this.ChnName = chnName;
	}


	public String getCity() {
		return City;
	}

	public void setCity(String city) {
		this.City = city;
	}


	public String getEngName() {
		return EngName;
	}

	public void setEngName(String engName) {
		this.EngName = engName;
	}


	public String getFobCode() {
		return FobCode;
	}

	public void setFobCode(String code) {
		FobCode = code;
	}


	public String getLanguage() {
		return Language;
	}

	public void setLanguage(String language) {
		this.Language = language;
	}

	public BigDecimal getMinOrderAmount() {
		return MinOrderAmount;
	}

	public void setMinOrderAmount(BigDecimal minOrderAmount) {
		this.MinOrderAmount = minOrderAmount;
	}

	public Integer getMinOrderQty() {
		return MinOrderQty;
	}

	public void setMinOrderQty(Integer minOrderQty) {
		this.MinOrderQty = minOrderQty;
	}

	public Integer getMsi() {
		return Msi;
	}

	public void setMsi(Integer msi) {
		Msi = msi;
	}

	public String getPoContact() {
		return PoContact;
	}

	public void setPoContact(String contact) {
		PoContact = contact;
	}


	public String getPoEmail() {
		return PoEmail;
	}

	public void setPoEmail(String email) {
		PoEmail = email;
	}

	public String getPoFax() {
		return PoFax;
	}

	public void setPoFax(String fax) {
		PoFax = fax;
	}

	public Integer getPoSentBy() {
		return PoSentBy;
	}

	public void setPoSentBy(Integer sentBy) {
		PoSentBy = sentBy;
	}

	public String getPoTel() {
		return PoTel;
	}

	public void setPoTel(String tel) {
		PoTel = tel;
	}


	public String getProductContract() {
		return ProductContract;
	}

	public void setProductContract(String productContract) {
		this.ProductContract = productContract;
	}


	public String getProvinceID() {
		return ProvinceID;
	}

	public void setProvinceID(String provinceID) {
		this.ProvinceID = provinceID;
	}


	public String getShipVia() {
		return ShipVia;
	}

	public void setShipVia(String shipVia) {
		this.ShipVia = shipVia;
	}


	public String getStatus() {
		return Status;
	}

	public void setStatus(String status) {
		this.Status = status;
	}

	public String getStreet1() {
		return Street1;
	}

	public void setStreet1(String street1) {
		this.Street1 = street1;
	}


	public String getStreet2() {
		return Street2;
	}

	public void setStreet2(String street2) {
		this.Street2 = street2;
	}


	public String getVendorType() {
		return VendorType;
	}

	public void setVendorType(String vendorType) {
		this.VendorType = vendorType;
	}


	public String getZip() {
		return Zip;
	}

	public void setZip(String zip) {
		this.Zip = zip;
	}
	
	
	@Override
	public boolean equals(Object o) {
		if (!(o instanceof Vendor)) {
			return false;
		}
		Vendor rhs = (Vendor) o;
		return new EqualsBuilder()
				.append(StringUtils.trim(this.getVendorID()), StringUtils.trim(rhs.getVendorID())).isEquals();
	}

	@Override
	@Transient
        [color=red]@IgnoreProperty[/color]
	public String getId() {
		return this.getVendorID();
	}

	public void setId(String vendorID) {
		this.setVendorID(vendorID);
	}
	@Override
	public int hashCode() {
		return new HashCodeBuilder(732005277, -727069309).append(
				this.getVendorID()).hashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this).append("VendorID", this.getVendorID())
				.toString();
	}
}



其中@IgnoreProperty annotation是Aegis databinding的一部分。相当于告诉该字段是只读的。
创建 service interface
import java.util.List;

import javax.jws.WebService;
import javax.jws.WebParam;


@WebService
public interface VendorMaintenance {


	public Vendor get(String vendorID);


	public void add(@WebParam(name = "vendor") Vendor vendor);

	public List<Vendor> getList();

	
	
}


@WebService 和@WebParam是JAX-WS annotations。如果你想完整的标注就看文档去。

创建实现类
import java.util.List;

import javax.jws.WebService;


@WebService(endpointInterface = "webservice.VendorMaintenance")
public class VendorMaintenanceImpl implements VendorMaintenance {
	private DAO<Vendor> vendorDao;

	public void setVendorDao(DAO<Vendor> vendorDao) {
		this.vendorDao = vendorDao;
	}

	public void add(Vendor vendor) {
		try {
			this.vendorDao.save(vendor);
		} catch (Exception e) {
			throw new BusinessException(e.getMessage());
		}

	}

	public Vendor get(String vendorID) {
		return this.vendorDao.get(vendorID);
	}

	public List<Vendor> getList() {
		// TODO Auto-generated method stub
		return this.vendorDao.getList();
	}


我用的是Hibernate,反正就是给一个结果。
@WebService 再次标注这是一个Web Service


创建配置文件
<?xml version="1.0" encoding="UTF-8"?>

<!-- START SNIPPET: beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:cxf="http://cxf.apache.org/core"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws  http://cxf.apache.org/schemas/jaxws.xsd">


	<!-- Load CXF modules from cxf.jar -->
	<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" />

	<!-- Enable message logging using the CXF logging feature 
	<cxf:bus>
		<cxf:features>
			<cxf:logging></cxf:logging>
		</cxf:features>
	</cxf:bus>-->

	<!-- The service bean -->
	<bean id="VendorMaintenanceImpl"
		class="com.mms.webservice.VendorMaintenanceImpl">
		<property name="vendorDao">
			<ref bean="otherVendorDao" />
		</property>
	</bean>

	<!-- Aegis data binding -->
	<bean id="aegisBean"
		class="org.apache.cxf.aegis.databinding.AegisDatabinding"
		scope="prototype" />
	<bean id="jaxws-and-aegis-service-factory"
		class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"
		scope="prototype">
		<property name="dataBinding" ref="aegisBean" />
		<property name="serviceConfigurations">
			<list>
				<bean
					class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" />
				<bean
					class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration" />
				<bean
					class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />
			</list>
		</property>
	</bean>

	<!-- Service endpoint -->
	<!-- See http://incubator.apache.org/cxf/faq.html regarding CXF + Spring AOP -->
	<jaxws:endpoint id="vendorMaintenance"
		implementorClass="com.mms.webservice.VendorMaintenanceImpl"
		implementor="#VendorMaintenanceImpl" address="/VendorMaintenance">
		<jaxws:serviceFactory>
			<ref bean="jaxws-and-aegis-service-factory" />
		</jaxws:serviceFactory>
	</jaxws:endpoint>



	<jaxws:endpoint id="helloWorld"
		implementor="com.mms.webservice.HelloWorldImpl"
		address="/HelloWorld" />

</beans>
<!-- END SNIPPET: beans -->



注意Aegis data binding部分就是数据绑定了。我采用的是默认绑定。还可以自己定义绑定。这里有一个问题。加了CXF:BUS但始终报错,以后解决了。然后发布,写出客户端就可以了。
分享到:
评论

相关推荐

    Apache CXF2+Spring2.5轻松实现WebService

    Apache CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。结合Spring框架,可以轻松地在Java应用程序中实现Web服务。本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 ...

    cxf+Spring2.5

    Apache CXF是一个开源服务框架,它允许开发人员创建和消费Web服务,而Spring框架则是一个广泛使用的Java企业级应用的IOC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。将两者结合,可以方便地...

    CXF与Spring 2.5整合

    当我们将CXF与Spring结合使用时,可以利用Spring的管理能力,简化CXF的配置和部署,提升应用的可维护性和可扩展性。 在“CXF与Spring 2.5整合”中,主要涉及到以下几个知识点: 1. **Spring的依赖注入**:Spring的...

    Spring2.0和XFire1.2.6整合案例

    XFire 1.2.6是Apache CXF的前身,它提供了一个快速、轻量级的方式来创建和消费SOAP Web服务。XFire支持多种协议,如HTTP、JMS,并且可以无缝地与Spring框架集成,利用Spring的依赖注入特性,使Web服务的实现更加简单...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    spring2.5+xfire1.2.6 客户端和服务端的配置

    总结来说,"spring2.5+xfire1.2.6 客户端和服务端的配置"涉及到的是一项历史性的Web服务集成技术,利用Spring的灵活性和Xfire的功能来创建和消费SOAP服务。随着技术的发展,现在的Web服务集成通常会使用更新的框架如...

    apache-cxf-2.0.10.zip下载地址

    3. **示例**:通常会有示例代码和项目,演示如何使用CXF创建和消费Web服务。 4. **配置文件**:如cxf.xml,用于配置CXF的行为和设置。 要开始使用Apache CXF 2.0.10,开发者需要解压此压缩包,将库文件添加到项目中...

    WebServiceConfig java springboot利用Apache CXF创建webserice接口配置类

    webserviceApache CXF java springboot利用Apache CXF创建webserice接口 Apache CXF 核心架构是以BUS为核心,整合其他组件。 * Bus是CXF的主干, 为共享资源提供一个可配置的场所,作用类似于Spring的...

    cxf和xfire的jar包冲突解决

    在Java开发中,有时我们可能需要整合不同的框架或者库,比如Apache CXF和XFire,这两个都是用于构建Web服务的框架。然而,由于它们都包含了处理XML Schema(XmlSchema)的相关组件,可能会出现jar包冲突的问题,导致...

    Developing Web Services with Apache CXF and Axis2(3rd Edition).zip

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...

    apache-cxf-3.0.13官方完整jar包

    通过这个官方完整jar包,开发者可以获得CXF的核心功能,使用bin目录中的工具进行服务部署,查阅api文档学习和理解框架,借助simple示例快速上手,并且能与Spring 3.2.0框架紧密结合,实现高效的服务开发和管理。

    apache-cxf-3.5.0.zip

    总之,Apache CXF是一个强大的Web服务框架,提供了全面的工具和API,使得开发人员能够轻松创建和维护复杂的Web服务。通过深入理解和实践"apache-cxf-3.5.0.zip"中的内容,开发者可以更好地利用CXF构建高效、健壮的...

    Apache CXF + Spring3 + REST + JSON配置

    Apache CXF是一个开源的服务框架,它允许开发人员创建和消费Web服务。Spring框架则是一个广泛使用的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程以及容器管理。REST(Representational ...

    Apache cxf 与spring集成

    1. **环境准备**:确保使用合适的开发环境,例如Eclipse 3.5,安装JDK 1.6,并获取Apache CXF 2.6.3和Spring 3.0的相关库文件。 2. **创建Web服务**:首先,创建一个新的Web项目,然后将CXF库的lib文件夹内容添加到...

    Apache CXF Web Service Development(源码)

    2. **JAX-WS和JAX-RS**:Apache CXF支持这两种Java API,用于创建和消费Web服务。 3. **WSDL(Web服务描述语言)**:如何使用WSDL定义服务接口,并通过CXF生成服务实现。 4. **数据绑定**:了解XML到Java对象的映射...

    apache cxf_jar包

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)中的Web服务。这个"apache cxf_jar包"包含了实现基于Java的Web服务所需的一系列核心库。下面我们将深入探讨这些jar文件及其在Web服务实现...

    apache-cxf-2.2.10安装包和如何配置到环境变量

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-2.2.10"版本是该框架的一个历史版本,发布于较早的时期。在本文中,我们将详细介绍如何安装和配置Apache CXF ...

    apache-cxf 2.2.8版本下载

    这个项目的核心目标是提供一个工具集,使开发者能够轻松地创建和部署基于SOAP和RESTful的服务。CXF这个名字来源于两个曾经流行的开源项目:XFire和Celtix,它们在2006年合并成为了现在的Apache CXF。 Apache CXF ...

    基于Apache CXF构建SOA应用

    Apache CXF 框架是一个比较有前途的开源 Web Services 框架,也是构建 SOA 架构应用的利器。本书采用案例源码和解说形式全面...最后,本书还描述了 Apache CXF 的工具、配置、调试、日志、部署和发布等使用的相关内容。

Global site tag (gtag.js) - Google Analytics