`
lazing
  • 浏览: 23828 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用XFire与Spring开发Web Service

阅读更多

使用XFire与Spring开发Web Service

源代码下载(三个样例工程Maven版本) xfire-src.zip

相关lib文件请到XFire官方网站(见参考) 下载发布版本。

PDF版本下载

目录
实现功能与特点 2

运行环境 2

开发平台 2

实施步骤 2

概述 2

新建Java Project 3

新建WTP动态WEB工程 4

实现服务 6

利用Spring、XFire装配与暴露服务 7

测试并访问服务 7

利用XFire实现客户端 10

扩展主题 11

利用MTOM传输二进制对象(文件) 11

附录 12

XFire在WebLogic 8.1中的配置 12

参考 12

实现功能与特点

  • 基于J2EE平台的Web Service服务
  • 开发方便,配置简单
    • 设计接口
    • 实现服务
    • 配置暴露接口
    • XFire将自动生成对应的wsdl
    • 支持高级详细配置
  • 与Spring无缝集成

运行环境

开发平台

实施步骤

概述

  1. 建立一个Java Project用于Domain实体和Web Service接口,这个工程的输出是一个jar包,为Web Service工程和Web Service Client共享。
  2. 建立WTP动态WEB工程部署Web Service
  3. 建立Java Project使用Web Service (Web Service Client)

新建Java Project

  1. 建立普通Java Project 以下称为common工程
  2. 如果使用Maven,项目依赖

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4</version>

</dependency>

  1. 普通情况需要加入如下lib

activation-1.1.jar

mail-1.4.jar

  1. 编写类 org.ave7.xfire.domain.User

org.ave7.xfire.domain.User.java

<!---->package org.ave7.xfire.domain;

import java.io.Serializable;

import java.util.Date;

public class User implements Serializable {

private static final long serialVersionUID = 6517808321041980976L;

private Long userId;

private String accountId;

private String userName;

private Date lastLogin;

public String getAccountId() {

return accountId;

}

public void setAccountId(String accountId) {

this.accountId = accountId;

}

public Date getLastLogin() {

return lastLogin;

}

public void setLastLogin(Date lastLogin) {

this.lastLogin = lastLogin;

}

public Long getUserId() {

return userId;

}

public void setUserId(Long userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

  1. 编写接口 org.ave7.xfire.ws.UserService
<!---->org.ave7.xfire.ws.UserService.java

package org.ave7.xfire.ws;

import org.ave7.xfire.domain.User;

public
interface UserService {

public User queryUserByAccoutId(String accountId);

public
void createUser(User user);

}

新建WTP动态WEB工程

  1. 配置WTP加入Tomcat Server Runtime
    1. 选择Windows -> Preference
    2. 在左侧选择Server->Installed Runtime 添加Tomcat
  2. 新建工程,选择Dynamic Web Project 输入Project Name: XFireService
  3. 设置运行环境为Dynamic Web Module 2.3 , JDK 1.4
  4. 如果需要结合Maven,请如下配置,否则使用默认即可
  5. 如果使用Maven请注入如下依赖以及之前的Common工程,否则根据后面的列表复制lib文件到对应目录

<dependency>

<groupId>org.codehaus.xfire</groupId>

<artifactId>xfire-aegis</artifactId>

<version>1.2.4</version>

</dependency>

<dependency>

<groupId>org.codehaus.xfire</groupId>

<artifactId>xfire-spring</artifactId>

<version>1.2.4</version>

<dependency>

<groupId>xalan</groupId>

<artifactId>xalan</artifactId>

<version>2.7.0</version>

</dependency>


Lib文件列表

xbean-2.2.0.jar

qdox-1.5.jar

commons-attributes-api-2.1.jar

ant-1.5.jar

wstx-asl-3.2.0.jar

stax-utils-20040917.jar

commons-httpclient-3.0.jar

spring-1.2.6.jar

XmlSchema-1.1.jar

stax-api-1.0.1.jar

jaxen-1.1-beta-9.jar

xfire-annotations-1.2.4.jar

xfire-aegis-1.2.4.jar

xfire-core-1.2.4.jar

xfire-spring-1.2.4.jar

xfire-xmlbeans-1.2.4.jar

jdom-1.0.jar

xbean-spring-2.7.jar

wsdl4j-1.6.1.jar

commons-beanutils-1.7.0.jar

activation-1.1.jar

mail-1.4.jar

commons-codec-1.3.jar

xmlParserAPIs-2.6.2.jar

xercesImpl-2.6.2.jar

junit-3.8.1.jar

commons-logging-1.0.4.jar
xalan-2.7.0.jar

实现服务

org.ave7.xfire.ws.UserServiceImpl.java

<!---->package org.ave7.xfire.ws;

import java.rmi.RemoteException;

import java.util.Date;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.ave7.xfire.domain.User;

public
class UserServiceImpl implements UserService {

private
static
final Log log = LogFactory.getLog(UserServiceImpl.class);

public
void createUser(User user) throws RemoteException {

log.debug(“createUser user
=” + user);

}

public User queryUserByAccoutId(String accountId) throws
RemoteException {

log.debug(“accountId
=” + accountId);

User user 
= new User();

user.setAccountId(“testAccount”);

user.setLastLogin(
new Date());

user.setUserName(“测试用户“);

user.setUserId(
new Long(123L));

return user;

}

}

利用Spring、XFire装配与暴露服务

  1. 在web.xml配置相关组件
<!----><?xml version=“1.0″ encoding=“UTF-8″?>

<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd”
>

<web-app id=“WebApp_ID”>

<display-name>XFireService</display-name>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext*.xml</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<servlet>

<servlet-name>xfire</servlet-name>

<servlet-class>

org.codehaus.xfire.spring.XFireSpringServlet

</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>xfire</servlet-name>

<url-pattern>/service/*</url-pattern>

</servlet-mapping>

</web-app>

  1. 在applicationContext.xml配置相关服务
<!----><?xml version=“1.0″ encoding=“UTF-8″?>

<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN”

“http://www.springframework.org/dtd/spring-beans.dtd”
>

<beans>

<import resource=“classpath:org/codehaus/xfire/spring/xfire.xml” />

<bean id=“baseWebService”

class=“org.codehaus.xfire.spring.remoting.XFireExporter”

lazy-init=“false” abstract=“true”>

<property name=“serviceFactory” ref=“xfire.serviceFactory” />

<property name=“xfire” ref=“xfire” />

</bean>

<bean id=“userWS” class=“org.ave7.xfire.ws.UserServiceImpl”></bean>

<bean id=“userService” parent=“baseWebService”>

<property name=“serviceBean” ref=“userWS” />

<property name=“serviceClass”

value=“org.ave7.xfire.ws.UserService” />

</bean>

</beans>

测试并访问服务

  1. 检查lib文件夹,Maven用户注意添加对common工程的依赖,其他情况请把common工程导出的jar包复制到web-inf/lib目录
  2. 在WTP中添加服务器,部署应用
  3. 在浏览器中输入类似 http://localhost:8080/XFireService/service 应看到
  4. 点击wsdl http://localhost:8080/XFireService/service/UserService?wsdl 看到

    如果这一步出现500错误,请检查是否有xalan.jar包
  5. 在WTP中利用Web Service Explore测试SOAP方式,在WTP工具栏选择 最右侧按钮
  6. 点击右上角进入WSDL page
  7. 点击WSDL Main节点输入服务wsdl地址,点击
  8. 列出所有的可用服务,选择服务测试
  9. 测试queryUserByAccountId
  10. 点击结果中的Source可以看到SOAP报文

利用XFire实现客户端

  1. 新建一个普通Java工程,lib中引用XFire相关包

如果使用Maven添加如下依赖以及对common工程的引用

<dependency>

<groupId>org.codehaus.xfire</groupId>

<artifactId>xfire-aegis</artifactId>

<version>1.2.4</version>

</dependency>

普通Java工程添加如下lib以及对common工程的引用

activation-1.1.jar

commons-codec-1.3.jar

commons-httpclient-3.0.jar

commons-logging-1.0.4.jar

jaxen-1.1-beta-9.jar

jdom-1.0.jar

junit-3.8.1.jar

mail-1.4.jar

stax-api-1.0.1.jar

stax-utils-20040917.jar

wsdl4j-1.6.1.jar

wstx-asl-3.2.0.jar

xercesImpl-2.6.2.jar

xfire-aegis-1.2.4.jar

xfire-core-1.2.4.jar

xmlParserAPIs-2.6.2.jar

XmlSchema-1.1.jar

  1. 编写客户端程序

org.ave7.xfire.client.MyClient.java

<!---->package org.ave7.xfire.client;

import java.net.MalformedURLException;

import java.rmi.RemoteException;

import org.ave7.xfire.domain.User;

import org.ave7.xfire.ws.UserService;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public
class MyClient {

public
static
void main(String[] args) {

try {

Service serviceModel 
= new ObjectServiceFactory()

.create(UserService.
class);

UserService service 
= (UserService) new XFireProxyFactory().create(

serviceModel,

“http:
//localhost:8080/XFireService/service/UserService”);

User user 
= service.queryUserByAccoutId(“123″);

System.out

.println(“userId
=” + user.getUserId() + “, userName=

+ user.getUserName() + “, lastLogin=

+ user.getLastLogin());

catch (MalformedURLException e) {

e.printStackTrace();

catch (RemoteException e) {

e.printStackTrace();

}

}

}

  1. 运行。控制台打印输出

2007-8-16 10:25:52 org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry crea

teTypeCreator

信息: Couldn’t find Java 5 module on classpath. Annotation mappings will not be su

pported.

userId=123, userName=测试用户, lastLogin=Thu Aug 16 10:25:53 CST 2007


扩展主题

利用MTOM传输二进制对象(文件)

MTOM是XFire的一个组件,可以协助利用压缩等手段更快的在网络上传输base64的SOAP对象

MTOM以及aegis默认支持如下几种java对象的数据

  • byte[]
  • javax.activation.DataHandler
  • javax.activation.DataSource
  1. 配置启用MTOM

在Spring配置文件中需要MTOM的服务中加入如下配置

<!----> <bean id=“userService” parent=“baseWebService”>

<property name=“serviceBean” ref=“userWS” />

<property name=“serviceClass”

value=“org.ave7.xfire.ws.UserService” />

<property name=”properties”>

<map>

<entry key=”mtom-enabled” value=”true” />

</map>

</property>

</bean>

  1. 在客户端编写传输程序
<!----> Service serviceModel = new ObjectServiceFactory()

.create(UserService.
class);

UserService service 
= (UserService) new XFireProxyFactory().create(

serviceModel,

“http:
//localhost:8080/XFireService/service/UserService”);

Client client 
= Client.getInstance(service);

client.setProperty(“mtom
-enabled”, “true”);

client.setProperty(HttpTransport.CHUNKING_ENABLED, “
true”);

User user 
= service.queryUserByAccoutId(“123″);

System.out

.println(“userId
=” + user.getUserId() + “, userName=

+ user.getUserName() + “, lastLogin=

+ user.getLastLogin());

ByteArrayDataSource byteData 
= new ByteArrayDataSource(

“Test Sending Byte”.getBytes(), “text
/plain; charset=UTF-8″);

service.transferDataSource(byteData);

附录

XFire在WebLogic 8.1中的配置

  1. Add the QName JAR file (qname.jar) into the WEB-INF/lib folder in your WAR file
  2. Add a file weblogic.xml into the WEB-INF folder in your WAR file
<!----><!DOCTYPE weblogic-web-app PUBLIC

“-//BEA Systems, Inc.//DTD Web Application 8.1//EN”

“http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd”
>

<weblogic-web-app>

<container-descriptor>

<prefer-web-inf-classes>true</prefer-web-inf-classes>

</container-descriptor>

</weblogic-web-app>

QName JAR file (qname.jar) http://docs.codehaus.org/download/attachments/27836/qname.jar?version=1

参考

XFire On WebLogic 8.1
http://docs.codehaus.org/display/XFIRE/XFire+on+WebLogic+8.1



HIMMEL 2007-08-16 13:15 发表评论
分享到:
评论

相关推荐

    使用 XFire 与 Spring 开发 Web Service.docx

    【使用 XFire 与 Spring 开发 Web Service】 Web Service是一种基于标准协议的接口,它允许不同应用程序之间进行互操作性,不受平台或编程语言限制。XFire是Apache CXF项目的一部分,是一个轻量级的、高性能的Java ...

    使用XFire+Spring构建Web Service

    【使用XFire+Spring构建Web Service】是一种高效且灵活的方法,尤其适合于那些希望利用Spring框架的优秀特性来开发Web Service应用的开发者。XFire是一个先进的Web Service框架,与Axis2并列为新一代的选择,因其...

    使用XFire+Spring构建Web Service步骤以及源代码.rar

    XFire是一个高性能、易于使用的Java Web服务框架,而Spring则是广泛采用的轻量级应用框架,它提供了丰富的功能来支持各种应用程序的开发,包括Web服务。本教程将详细介绍如何结合XFire和Spring来构建Web服务,并提供...

    使用XFire+Spring构建Web Service步骤

    总结,使用XFire和Spring构建Web Service,可以利用Spring的IoC和AOP特性简化服务的创建和管理,同时XFire提供了高效且灵活的Web Service实现。通过以上步骤,开发者可以快速地搭建自己的Web Service,并与其他系统...

    使用XFire+Spring构建Web Service(二).doc

    7. **测试与调试**:使用XFire和Spring构建的Web服务可以通过JUnit或其他测试框架进行单元测试,也可以利用XFire提供的测试工具进行功能测试。 总结来说,这个例子不仅展示了如何使用XFire+Spring构建Web服务,还...

    Web Service框架xfire与spring集成开发流程

    - 接着,我们需要配置XFire的servlet,这里使用的是`XFireSpringServlet`,这是专门为Spring设计的Servlet,能够与Spring容器协同工作,发布在Spring中的Web Service。 - 最后,配置servlet-mapping,将`.ws`后缀...

    xfire+spring开发webservice

    另一份文档《开发XFire_Web_Service应用.pdf》可能包含了更多关于XFire的用法、最佳实践和案例研究,对于深入理解和掌握XFire与Spring的整合非常有帮助。 总的来说,使用XFire和Spring开发Web服务能够提供一个高效...

    整理xfire和spring的集成 web service 面向服务编程 java

    【整合XFire与Spring进行Web Service开发】 XFire是一个基于Java的SOAP Web Service框架,而Spring是一个广泛应用的轻量级框架,它提供了依赖注入、面向切面编程等特性。将两者集成可以方便地构建和消费Web Service...

    基于XFire与Spring集成的Web Service实现

    该文档旨在帮助软件开发人员更好地理解和实践XFire与Spring集成提供的Web Service服务端和客户端编程方式。 适用人群:具备一定Java开发经验的技术人员或对Web Services有基本认识的人士。 使用场景及目标:指导用户...

    XFire+Spring发布Web Service(一)

    总结来说,XFire与Spring的结合使用简化了Web服务客户端的开发过程。通过Spring的依赖注入和配置管理,我们可以轻松地创建和管理Web服务客户端实例,而XFire则负责处理底层的SOAP通信和WSDL解析。这样的组合使得开发...

    xfire ibatis spring web service

    在Web服务开发中,XFire允许开发者定义服务接口和服务实现,然后通过Spring配置将其暴露为SOAP Web服务。服务端可以通过处理来自客户端的SOAP请求,调用业务逻辑,这部分逻辑可能会涉及到与数据库的交互。这时,...

Global site tag (gtag.js) - Google Analytics