使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK

Similar documents
EJB-Programming-4-cn.doc

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

在Spring中使用Kafka:Producer篇

IoC容器和Dependency Injection模式.doc

untitled

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

优迈科技教学大纲2009版本

FileMaker 16 ODBC 和 JDBC 指南

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

输入 project name 选择完成

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Java 1 Java String Date

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

BPS6.0 Web服务集成和短流程功能使用手册

基于CDIO一体化理念的课程教学大纲设计


Learning Java

untitled

Microsoft Word - 01.DOC

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明

Java

附录J:Eclipse教程

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

XXXXXXXX

OSWorkflow Documentation



PowerPoint Presentation

epub 61-2

JavaIO.PDF

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

untitled

Servlet

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

LiveBOS产品白皮书

untitled

Hive:用Java代码通过JDBC连接Hiveserver

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

《大话设计模式》第一章

ebook

FileMaker 15 ODBC 和 JDBC 指南

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

jsp

目 录 目 录 平 台 概 述 技 术 架 构 技 术 特 点 基 于 统 一 平 台 的 多 产 品 线 支 撑 先 进 性 安 全 性 开 放 性 高 性 能 和

epub83-1

keystore weblogic.jks certreq.pem CA server.cer

weblogic

chp6.ppt

目 录 1. 前 言 为 什 么 要 用 ESB 技 术 发 展 业 务 需 求 IT 需 求 IT 与 业 务 一 致 性 要 求 TongIntegrator ESB v5 简 介..

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

untitled

LiveBOS产品白皮书

最即時的Sybase ASE Server資料庫診斷工具

untitled

Chapter 9: Objects and Classes

RunPC2_.doc

1

信息

使用MapReduce读取XML文件

1. 2. Flex Adobe 3.

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word - Functional_Notes_3.90_CN.doc

untitled

Android Android Android SDK iv

untitled

计算机软件技术专业教学计划

概述

TopTest_Adminstrator.doc

Microsoft Word - WebGoat用户指南-beta2.doc

软件概述

Transcription:

使用 XFire 与 Spring 开发 Web Service 1 使用 XFire 与 Spring 开发 Web Service 王啸宇信易诚 wangxiao1@mail.yuchengtech.com 目录 实现功能与特点... 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

使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK 1.4+ Tomcat 4.0+ / WebLogic 8.1 ( 需要特殊配置, 见附录 ) 未测试其他环境 其他包依赖参看 http://xfire.codehaus.org/dependency+guide 开发平台 Eclipse WTP 1.5 平台 IDE:www.eclipse.org/webtools/ XFire 1.2.6 http://xfire.codehaus.org/home 可以选择安装 XFire for Eclipse 插件, 可以添加 XFire 相关类库, 根据 WSDL 生成代码 http://xfire.codehaus.org/eclipse+plugin JDK 1.4.2 http://java.sun.com/products/archive/ Tomcat 5.0.28 http://tomcat.apache.org/download-55.cgi#5.0.28 实施步骤 概述 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)

使用 XFire 与 Spring 开发 Web Service 3 新建 Java Project 1. 建立普通 Java Project 以下称为 common 工程 2. 如果使用 Maven, 项目依赖 <dependency> <groupid>javax.mail</groupid> <artifactid>mail</artifactid> <version>1.4</version> </dependency> 3. 普通情况需要加入如下 lib activation-1.1.jar mail-1.4.jar 4. 编写类 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;

使用 XFire 与 Spring 开发 Web Service 4 5. 编写接口 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 a) 选择 Windows -> Preference b) 在左侧选择 Server->Installed Runtime 添加 Tomcat

使用 XFire 与 Spring 开发 Web Service 5 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>

使用 XFire 与 Spring 开发 Web Service 6 <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> </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));

使用 XFire 与 Spring 开发 Web Service 7 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> 2. 在 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 目录

使用 XFire 与 Spring 开发 Web Service 8 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 地址, 点击

使用 XFire 与 Spring 开发 Web Service 9 8. 列出所有的可用服务, 选择服务测试 9. 测试 queryuserbyaccountid

使用 XFire 与 Spring 开发 Web Service 10 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 2. 编写客户端程序 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");

使用 XFire 与 Spring 开发 Web Service 11 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(); 3. 运行 控制台打印输出 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> 2. 在客户端编写传输程序 Service servicemodel = new ObjectServiceFactory().create(UserService.class); UserService service = (UserService) new XFireProxyFactory().create( servicemodel, "http://localhost:8080/xfireservice/service/userservice");

使用 XFire 与 Spring 开发 Web Service 12 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 参考 File Transfers using SOAP XFire http://blogs.opensymphony.com/plightbo/2006/04/file_transfers_using_soap_xfir.html XFire 生火指南 http://wiki.springside.org.cn/display/springside/xfire XFire 官方网站 http://xfire.codehaus.org/home XFire On WebLogic 8.1 http://docs.codehaus.org/display/xfire/xfire+on+weblogic+8.1