使用XFire与Spring开发Web Service

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

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

实现功能与特点

基于J2EE平台的Web Service服务

开发方便,配置简单

设计接口

实现服务

配置暴露接口

XFire将自动生成对应的wsdl

支持高级详细配置

与Spring无缝集成

运行环境

JDK 1.4+

Tomcat 4.0+ / WebLogic 8.1 (需要特殊配置,见附录)未测试其他环境

开发平台

实施步骤

概述

建立一个Java Project用于Domain实体和Web Service接口,这个工程的输出是一个jar包,为Web Service工程和Web Service Client共享。

建立WTP动态WEB工程部署Web Service

建立Java Project使用Web Service (Web Service Client)

新建Java Project

建立普通Java Project 以下称为common工程

如果使用Maven,项目依赖

javax.mail

mail

1.4

普通情况需要加入如下lib

activation-1.1.jar

mail-1.4.jar

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

org.ave7.xfire.domain.User.java

packageorg.ave7.xfire.domain;importjava.io.Serializable;importjava.util.Date;publicclassUserimplementsSerializable {privatestaticfinallongserialVersionUID=6517808321041980976L;privateLong userId;privateString accountId;privateString userName;privateDate lastLogin;publicString getAccountId() {returnaccountId;

}publicvoidsetAccountId(String accountId) {this.accountId=accountId;

}publicDate getLastLogin() {returnlastLogin;

}publicvoidsetLastLogin(Date lastLogin) {this.lastLogin=lastLogin;

}publicLong getUserId() {returnuserId;

}publicvoidsetUserId(Long userId) {this.userId=userId;

}publicString getUserName() {returnuserName;

}publicvoidsetUserName(String userName) {this.userName=userName;

}

}

编写接口 org.ave7.xfire.ws.UserService

org.ave7.xfire.ws.UserService.javapackageorg.ave7.xfire.ws;importorg.ave7.xfire.domain.User;publicinterfaceUserService {publicUser queryUserByAccoutId(String accountId);publicvoidcreateUser(User user);

}

新建WTP动态WEB工程

配置WTP加入Tomcat Server Runtime

选择Windows -> Preference

在左侧选择Server->Installed Runtime 添加Tomcat

新建工程,选择Dynamic Web Project 输入Project Name: XFireService

设置运行环境为Dynamic Web Module 2.3 , JDK 1.4

如果需要结合Maven,请如下配置,否则使用默认即可

如果使用Maven请注入如下依赖以及之前的Common工程,否则根据后面的列表复制lib文件到对应目录

org.codehaus.xfire

xfire-aegis

1.2.4

org.codehaus.xfire

xfire-spring

1.2.4

xalan

xalan

2.7.0

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

packageorg.ave7.xfire.ws;importjava.rmi.RemoteException;importjava.util.Date;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.ave7.xfire.domain.User;publicclassUserServiceImplimplementsUserService {privatestaticfinalLog log=LogFactory.getLog(UserServiceImpl.class);publicvoidcreateUser(User user)throwsRemoteException {

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

}publicUser queryUserByAccoutId(String accountId)throwsRemoteException {

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

User user=newUser();

user.setAccountId(“testAccount”);

user.setLastLogin(newDate());

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

user.setUserId(newLong(123L));returnuser;

}

}

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

在web.xml配置相关组件

<?xml  version=“1.0″ encoding=“UTF-8″?>web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”

“http://java.sun.com/dtd/web-app_2_3.dtd”>XFireServicecontextConfigLocationclasspath:applicationContext*.xmlorg.springframework.web.context.ContextLoaderListenerxfireorg.codehaus.xfire.spring.XFireSpringServletxfire/service/*

在applicationContext.xml配置相关服务

<?xml  version=“1.0″ encoding=“UTF-8″?>beans PUBLIC “-//SPRING//DTD BEAN//EN”

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

测试并访问服务

检查lib文件夹,Maven用户注意添加对common工程的依赖,其他情况请把common工程导出的jar包复制到web-inf/lib目录

在WTP中添加服务器,部署应用

在WTP中利用Web Service Explore测试SOAP方式,在WTP工具栏选择

最右侧按钮

点击右上角进入WSDL page

点击WSDL Main节点输入服务wsdl地址,点击

列出所有的可用服务,选择服务测试

测试queryUserByAccountId

点击结果中的Source可以看到SOAP报文

利用XFire实现客户端

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

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

org.codehaus.xfire

xfire-aegis

1.2.4

普通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

编写客户端程序

org.ave7.xfire.client.MyClient.java

packageorg.ave7.xfire.client;importjava.net.MalformedURLException;importjava.rmi.RemoteException;importorg.ave7.xfire.domain.User;importorg.ave7.xfire.ws.UserService;importorg.codehaus.xfire.client.XFireProxyFactory;importorg.codehaus.xfire.service.Service;importorg.codehaus.xfire.service.binding.ObjectServiceFactory;publicclassMyClient {publicstaticvoidmain(String[] args) {try{

Service serviceModel=newObjectServiceFactory()

.create(UserService.class);

UserService service=(UserService)newXFireProxyFactory().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();

}

}

}

运行。控制台打印输出

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

配置启用MTOM

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

在客户端编写传输程序

Service serviceModel=newObjectServiceFactory()

.create(UserService.class);

UserService service=(UserService)newXFireProxyFactory().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=newByteArrayDataSource(

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

service.transferDataSource(byteData);

附录

XFire在WebLogic 8.1中的配置

Add the QName JAR file (qname.jar) into the WEB-INF/lib folder in your WAR file

Add a file weblogic.xml into the WEB-INF folder in your WAR file

weblogic-web-app PUBLIC

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

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

参考

java 舍入误差 博客_HIMMEL相关推荐

  1. [java手把手教程][第二季]java后端博客系统文章系统——No10

    项目github地址:github.com/pc859107393- 实时项目同步的地址是国内的码云:git.oschina.net/859107393/m- 我的简书首页是:www.jianshu. ...

  2. Java 开源博客 Solo 1.6.0 发布 - 新后台

    简介 Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 15+ 套精心制作的皮肤.除此之外,Solo 还有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动. ...

  3. java毕业论文_【毕业论文】基于java的博客网站设计与开发毕业论文(word文档)

    <[毕业论文]基于java的博客网站设计与开发毕业论文.doc>由会员分享,可免费在线阅读全文,更多与<[毕业论文]基于java的博客网站设计与开发毕业论文(word文档)>相 ...

  4. JAVA个人博客系统设计与实现 毕业设计开题报告

      本科生毕业论文 基于Java(springboot框架)个人博客系统 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本科生毕业 ...

  5. java个人博客系统代码下载_java个人博客系统代码

    利用现存框架可以更快开发系统.所以选 择 Java 技术作为 blog 的开发工具. 为了增加系统的吞吐量,提高并发 +申请认证 文档贡献者 胡进全 计算机网络管理员 ...... javaweb课程 ...

  6. 用开源博客系统OneBlog来搭建自己的个人技术博客网站(java版博客系统)

    java版博客系统 一直想搭建一个个人的博客,方便记录和分享一些技术点,在网上也找了一圈,最终在开源中国中发现了一款很不错的java版的博客系统 https://gitee.com/yadong.zh ...

  7. 记录自己第一个java学习博客

    记录自己第一个java学习博客 阿里java规范 弄懂 JRE.JDK.JVM 之间的区别与联系 DOS常用命令 常用mac终端命令 今天我学习了java第一个程序打印出helloworld! pac ...

  8. java开源博客系统solo_Solo Java 开源博客

    Solo 是一款一个命令就能搭建好的 Java 开源博客系统,如果你想开个独立博客,请一定不要错过!2.5.0 版本主要支持了 Markdown/JSON 格式数据导出,并改进了 Markdown 渲 ...

  9. java毕业设计博客管理系统Mybatis+系统+数据库+调试部署

    java毕业设计博客管理系统Mybatis+系统+数据库+调试部署 java毕业设计博客管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...

最新文章

  1. 网站优化中导致关键词排名不稳定的原因有哪些?
  2. ProtoBuf开发者指南
  3. 人民币小写金额转大写金额
  4. 用Blazor技术封装G2Plot实现Charts组件
  5. 11年亚锦赛球员数据_2020年11月楼市数据更新!全美房屋中间价持续上涨
  6. ios中获取各种文件的目录路径方法
  7. linux 新建文件夹命令
  8. 黑龙江工程学院锐捷校园网连接路由器免认证
  9. mysql表结构指哪些_gp数据库查看表结构
  10. project安装教程/包
  11. simulink中不能改名_王者荣耀:万格改名教学,空白名、重复名、个性符号名改法技巧!...
  12. 一款自制的视频录制软件
  13. 做自媒体如何快速实现财务自由
  14. modelsim is exiting with code:211 10秒后自动关闭退出
  15. mysql中的锁(表锁,行锁)
  16. android开发过程中遇到的问题
  17. 计算机开机关响五声原因,电脑开机后出现5声报警短响怎么办_电脑开机后出现5声报警短响的解决方法...
  18. 全球与中国微型翘板开关市场现状及未来发展趋势
  19. canfd收不到数据_CAN-FD协议浅析
  20. Navicat连接Linux-MySQL

热门文章

  1. 快速理解Vue 使用 vm.$set 解决对象新增属性不能响应的问题
  2. 在wincc中编辑语言c的另一个应用领域是关于动态向导的创建,wincc的c语言基础
  3. slf4j的log.warn()的参数问题研究
  4. 如何安装 Elasticsearch
  5. 联想Y7000P 电池充不进电以及电量为零
  6. poi设置word表格单元格宽度_poi,word,表格样式
  7. java变形金刚中文版_[原创]RC4、Base64魔改看雪CTF-变形金刚学习笔记
  8. 浙大公共管理硕士(MPA)项目的学费水平如何?
  9. 学校门口保安啃完这份524页“Java中高级学习笔记”都能拿13k了,你还不行动起来?
  10. 谷歌Chrome清除秘密进行加密货币挖矿的浏览器插件