使用 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

EJB-Programming-3.PDF

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

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

在Spring中使用Kafka:Producer篇

untitled

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

IoC容器和Dependency Injection模式.doc

untitled

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

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

untitled

优迈科技教学大纲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

第03章 控制反转(Spring IoC)

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

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

untitled

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


Learning Java

untitled

Microsoft Word - 01.DOC

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

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇 业 务 流 程 管 理 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX BPMX3 是 什 么 为 什 么 要 优 先 采 用 BPMX

Java

2 Requirements Documentation Doc Name Doc No. 1.0 Version No. Total Page Generated By V6.0.0 Generated Date 2011/10/21 Checked By Checked Date 2011/10

附录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

● 源起

D C 93 2

序号:001

FileMaker 15 ODBC 和 JDBC 指南

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

基于ECO的UML模型驱动的数据库应用开发1.doc

Chapter 9: Objects and Classes

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

jsp

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

(Microsoft Word - \272\364\263q\245|\244A_ _\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc)

<4D F736F F D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

epub83-1

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

keystore weblogic.jks certreq.pem CA server.cer

weblogic

chp6.ppt

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

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

ArcGIS Sever.NET ArcGIS Server Web JAVA ArcGIS Server Web

J2ME ISBN J2ME MIDP MIDP 2.0 API J2ME Netbeans IDE 4.1 Mobility Pack 4.1 MIDlet MIDlet MIDP PUSH API PDA API Ja

<4D F736F F D20B9FABCD2BBFAB9D8B0ECB9ABBDA8D6FEBACDB4F3D0CDB9ABB9B2BDA8D6FEC4DCBAC4BCE0B2E2CFB5CDB3C8EDBCFEBFAAB7A2D6B8B5BCCBB5C3F7CAE92E646F63>

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

untitled

信息

使用MapReduce读取XML文件

1. 2. Flex Adobe 3.

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


Microsoft Word - Functional_Notes_3.90_CN.doc

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

untitled

<4D F736F F D20C8EDBCFEA1B A1B33136BAC5A3BAB9D8D3DAB7A2B2BC C4EAC8EDBCFEB9A4B3CCCAB5D1B5D6AED0A3C4DABFC6D1D0CFEEC4BFB5C4CDA8D6AA2E646F63>

Android Android Android SDK iv

untitled

Stateless Session Beans(无状态bean)的学习

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

概述

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