- 浏览: 880480 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hzw2312:
C = sin(MLatA)*sin(MLatB)*cos(M ...
根据地球上任意两点的经纬度计算两点间的距离 -
zhang_sun:
rewind方法的limit又是多少呢?等于capacity? ...
ByteBuffer的flip,clear及rewind区别 -
kalogen:
一种每次都获取到不同的随机数的办法int ranseed=12 ...
J2ME中Random类的使用 -
kalogen:
估计部署在某个端口下吧,仔细检查一下发布的配置文件
Tomcat负载均衡和集群环境的搭建 -
zhuchao_ko:
文件大点就嗝屁了~~~
Axis 1.4 上传二进制文件(base64Binary)
有了在 《Eclipse下使用Xfire创建WebService入门示例(上)》中所描述的构建基础,接下来我们要写一个服务端java类。模拟应用是一个银行转账应用,从账户A转账到账户B并需要给出金额和货币种类。我们先来实现一个接口IBankingService.java代码全文如下:
- package com.mybank.xfire.example;
- public interface IBankingService {
- public String transferFunds(
- String fromAccount, String toAccount, double amount, String currency);
- }
然后编写一个普通的Java类BankingService包含了一个叫做transferFunds()的方法来为我们完成这项工作。它需要四个输入参数:
- package com.mybank.xfire.example;
- import java.text.NumberFormat;
- import java.text.DecimalFormat;
- public class BankingService implements IBankingService {
- //Default constructor.
- public BankingService(){
- }
- /** Transfers fund from one account to another.
- */
- public String transferFunds(
- String fromAccount, String toAccount, double amount, String currency){
- String statusMessage = "";
- //调用业务逻辑执行操作.
- //建立并返回状态信息.
- try {
- NumberFormat formatter = new DecimalFormat("###,###,###,###.00");
- statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+
- " was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
- } catch (Exception e){
- statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();
- }
- return statusMessage;
- }
- }
你可以看到BankingService是一个普通的Java类,没有任何代码告诉我们它将会在Web Services中使用。只是要有默认的构造函数,类型是public。这是必须的。否则,XFire不能够初始化这个类。好的,这里我们不需要增加任何东西。我们所有的工作都在部署描述符里完成。
Web应用的部署描述符
在Java中,Web应用程序通常需要至少一个部署描述符(叫做web.xml)对其进行配置。XFire本身是一个基于servlet的应用程序。因此,我们需要增加必要的引用到描述符文件中。然后我们还必须配置将要创建的Web Services。我们使用一个称为services.xml的新文件来完成这件事。在使用Eclipse工具构建工程的时候我们已经完成了这项配置(参见(上)文)。
services.xml
- <beans xmlns="http://xfire.codehaus.org/config/1.0">
- <service>
- <name>Banking</name>
- <namespace>mybank</namespace>
- <serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
- <implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
- </service>
- </beans>
Web Services的定义包含在元素中,它还含有一些子元素。
第一个子元素是Banking,它可以是你提供任何的合法名字。这将会被客户端程序和其它需要定位你的服务的组件用到。例如,在服务准备好以后,你将在浏览器上使用这个名字来查看WSDL。
下一个子元素是。任何合法的XML名字都是可以的。用来唯一标识你的服务的各个参数。(注释@)
注释@:Namespace派什么用?namespace的作用是要避免命名冲突。如果我建立一项Web
Service,其中的WSDL文件包含一个名为"foo"的元素,而你想要使用我的服务与另一项服务连接作为补充,这样的话另一项服务的WSDL文件就不能包含名为"foo"的元素。两个服务器程序只有在它们在两个事例中表示完全相同的东西时,才可以取相同的名字。如果有了表示区别的namespace,我的网络服务里的"foo"就可以表示完全不同于另一个网络服务里"foo"的含义。在你的客户端里,你只要加以限制就可以引用我的"foo"。
元素包含了Java类的名字,它指定了方法签名。在我们的例子中,它是接口IBankingService。如果Java类没有实现任何接口,你就需要把类的名字放在这里。在你的Java类或者接口中可能有几个方法。只需要一个入口把它们全部发布为Web Services。
保存了实现方法的Java类名。这是一个可选元素。如果上一个元素包含了一个接口,那么相应的实现类必须在这里指定。
我们如何知道Web Service正在工作呢?
为了了解Web Service是否正在工作,我们需要测试。首先,我们测试来看WSDL是否可用。我们在浏览器中输入URL。哪个URL?因为我们的应用程序的war文件是aa.war,并且在services.xml中给出的服务名是Banking,WSDL的URL应该是:http://localhost:8080/aa/services/Banking?wsdl。
请注意:URL的第一部分,例如,http://localhost:8080,可能会根据你的应用服务器不同而不同。无论怎样,当你输入URL后,将会看到一个XML文档,这个文档叫做服务的WSDL。如果你看到了,这就是你的应用作为Web Service已经可用的第一个证明。
正确的执行情况:
在这个WSDL中我们可以看到<xsd:element name="transferFunds">的服务方法明以及他的四个参数描述等信息。但是这个测试是不够的。可能会发生这种情况,可以看到WSDL,但是从客户端程序可能会访问不到服务。因此为了核实服务是否可以访问了,我们必须使用一个客户端进行服务的实际调用来进行一个真正的测试。
开发一个客户端
编写BankClient.java
- package com.mybank.xfire.client;
- import java.net.MalformedURLException;
- import org.codehaus.xfire.XFire;
- import org.codehaus.xfire.XFireFactory;
- import org.codehaus.xfire.client.XFireProxyFactory;
- import org.codehaus.xfire.service.Service;
- import org.codehaus.xfire.service.binding.ObjectServiceFactory;
- import com.mybank.xfire.example.IBankingService;
- /**
- * @author AdminiDD
- *
- */
- public class BankClient {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- }
- /* Call the Web service
- *
- */
- public String callWebService(
- String fromAccount, String toAccount, double amount, String currency)
- throws MalformedURLException, Exception {
- //Create a metadata of the service 创建一个service的元数据
- Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);
- System.out.println("callSoapServiceLocal(): got service model." );
- //Create a proxy for the deployed service 为XFire获得一个代理工厂对象
- XFire xfire = XFireFactory.newInstance().getXFire();
- XFireProxyFactory factory = new XFireProxyFactory(xfire);
- //得到一个服务的本地代理
- String serviceUrl = "http://127.0.0.1:8080/wstest/services/Banking";
- IBankingService client = null;
- try {
- client = (IBankingService) factory.create(serviceModel, serviceUrl);
- } catch (MalformedURLException e) {
- System.out.println("WsClient.callWebService(): EXCEPTION: " + e.toString());
- }
- //Invoke the service 调用服务 返回状态结果信息
- String serviceResponse = "";
- try {
- serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);
- } catch (Exception e){
- System.out.println("WsClient.callWebService(): EXCEPTION: " + e.toString());
- serviceResponse = e.toString();
- }
- System.out.println("WsClient.callWebService(): status=" + serviceResponse);
- //Return the response
- return serviceResponse;
- }
- }
编写两个JSP页来模拟请求和响应
index.jsp;发送请求
<!----><!---->
- <!---->
- <!---->
- <!---->"-//W3C//DTD HTML 4.01 Transitional//EN">
- "<!---->">
- "pragma" content="no-cache">
- "cache-control" content="no-cache">
- "expires" content="0">
- "keywords" content="keyword1,keyword2,keyword3">
- "description" content="This is my page">
- <!---->
-
Welcomle to WebService!
-
- Bank test : give my money to you!
- "form1" action="say.jsp" method="POST">
- your account ID:"toAcc" type="text"/>
- How much do you want:"amount" type="text" />
- "center">"submit" value="提交">
-
say.jsp,接收请求并返回响应结果
java 代码- <!---->
- <!---->
- <!---->"-//W3C//DTD HTML 4.01 Transitional//EN">
- "<!---->">
- "pragma" content="no-cache">
- "cache-control" content="no-cache">
- "expires" content="0">
- "keywords" content="keyword1,keyword2,keyword3">
- "description" content="This is my page">
- <!---->
-
Welcomle to WebService!
-
- Message from WebService:<!---->
项目aa编译完毕并发布到Tomcat上,启动Tomcat测试开始!访问http://127.0.0.1:8080/aa/index.jsp
执行效果:
添上你的账户,想要多少钱就写多少钱,嘿嘿 提交!请求转发到say.jsp如果你看到下面的情况:
恭喜你!成功啦~ 可以看到有 RMB$ 1,000.00 从affman(a fit foolish man~)的账户转到了liudan的账户上!
总结:
基本的Web Services开发步骤清单
这个清单总结了将一个Java方法发布为Web Service所必须的步骤:
- 1、 检查Java类的方法和默认构造函数确保为public
- 2、 增加XFire servlet相关条目到web.xml中
- 3、 创建services.xml,把它放到WEB-INF/classes/META-INF/xfire目录下
- 4、 增加XFire和第三方包到你的Web应用的WEB-INF/lib文件夹中
嗯~确实不复杂!
以上步骤均经过亲自测试执行,如有勘误请至mail to: sweetmoondd@hotmail.com 欢迎指教和共同探讨
以下相关讨论(转自原文http://www.360doc.com/showweb/0/0/516946.aspx)
XFire的其他高级特性
XFire的使用可能比较简单,但是在特性和功能性上,它却占据着领导者的位置。下面是它的高级特性:
- ---本地数据绑定支持POJOs(plain-old Java objects)、XMLBeans、JAXB(Java Architecture for XML Binding)、Castor等等。数据绑定说明了Web Services的XML请求和映射到Java对象的XML响应。
- ---使用StAX(Streaming API for XML)处理XML文档。同DOM的基于树和SAX的事件驱动的处理方式相比,StAX使用了拉(pull)机制,它使处理更快速,内存效率更高。
- ---支持多种传输协议,如HTTP、JMS(Java Message Service)和JVM内部传输。
- ---嵌入式,这是XFire的核心功能之一。你可以把这个SOAP引擎嵌入到你的应用中,完全隐藏所有XFire特定引用,同样所有配置都是程序驱动。
- ---丰富的API,它使XFire可高度自定义,允许开发者在不同的阶段截获请求,并且对他们进行处理。
- ---兼容最新的标准例如SOAP1.1(没有加密远程工程调用,或者RPC)和1.2、WSDL1.1、the Web Services Interoperability Organization’s Basic Profile 1.0、Web Services Addressing和WS-Security。
- ---开发Web Services的好的实践是从WSDL开始。大部分的SOAP引擎提供了从WSDL生成服务stub的工具。XFire也提供了这样一个工具。但是它是基于注释(annotations-based)的,因此需要J2SE5.0。对于仍坚持使用J2SE1.4.x的人来说,它不是一个令人拍手叫好的工具,因为我们有很多其他方式来编写客户端,一个就是文章中演示的方式。
- ---附件支持,它将会包含在未来发行的版本中。
- ---易于学习的用户向导。XFire团队在这个方面还有很多工作需要做。
版权声明:
本文内容为作者经过查阅资料,编码实践,编辑实属原创,仅限学习与个人收藏,为避免制造网络垃圾请误用于商业性的原文转载。如有勘误请至mail to: sweetmoondd@hotmail.com 期待共同探讨!
参考资料:
通过WebService实现Java与.Net互联 作者:itlove
图文并茂的阐述了WebService相关概念。
轻松简单地开发Web Services 作者:Shahid Ahmed ;mydeman
文章语言组织简练明确,是众多资料中表述最确切全面的,很多语言也被我原文转述了,原因是说的很好无须再由本人重新组织语言。可惜也是被转载的。
利用xfire开发webservice专题[四] 作者:MSN:spell_zheng@hotmial.com
借鉴了测试客户端的jsp形式实现。
发表评论
-
log4j配置输出hibernate执行的SQL和相应参数以及打印结果
2017-09-01 20:26 5559hibernate的配置文件:hibernate.prope ... -
使用Gson将对象类转成Json对象时出现\u003d的问题
2015-11-03 17:07 4081Gson将对象转成Json对象的方法 ... -
maven pom.xml加载不同properties配置
2015-10-30 11:52 12571.pom.xml =================== ... -
剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
2015-10-19 19:03 716剖析淘宝 TDDL ( TAOBAO DISTRIBUTE ... -
"org.eclipse.wst.validation" has been removed
2015-10-15 11:22 1168从SVN服务器上导出maven工程遇到的问题," ... -
mysql/Java服务端对emoji的支持
2015-09-19 10:43 847前言: 最近开发的iOS项目因为需要用户文本的存储,自然就 ... -
Ehcache配置详解及CacheManager使用
2015-04-09 14:40 2049<?xml version="1.0&quo ... -
详解 Too many open files
2014-09-07 00:25 1233运行在Linux系统上的Java程序可能会出现" ... -
Could not find jar tool executable问题解决
2014-03-21 00:28 1258eclipse 中,在用PROGUARD生成混淆包Obfus ... -
eclipse不小心删除了代码文件的一个解决办法
2013-08-15 17:02 1310平时用eclipse写代码,不小心删除了一个文件,一般就找不回 ... -
关于ProGuard的学习了解
2012-09-20 09:51 1440在Android项目中用到JNI, ... -
Java实现MD5加密
2012-08-23 23:32 1077import java.io.UnsupportedEnco ... -
叫你怎么下载开源代码,例如:hg clone https://gtalksms.googlecode.com/hg/ gtalksms .
2012-07-04 17:29 1643svn的就不说了,git的也不说了,这些都是常用的,直说hg ... -
Java NIO与IO 区别和比较
2012-06-17 11:20 1469本文将通过一些实例来 ... -
jar打包出现java.io.IOException: invalid header field 解决方案
2012-06-10 12:10 4837执行: D:\aaa\DMDemo>jar -cvfm ... -
java内存原型分析-基本知识
2012-06-06 13:53 778java虚拟机内存原型寄存 ... -
java InputStream读取数据问题
2012-05-21 15:45 9821. 关于InputStream.read() 在从数 ... -
java读取文件夹下的所有文件夹和文件
2012-05-15 10:46 1163package com.borland.samples.wel ... -
Java中yield(),sleep()以及wait()的区别
2012-05-08 11:03 745往往混淆了这三个函数的使用。 从操作系统的角度讲,os会维护一 ... -
Netbeans 7和Subversion(svn) 1.7
2012-05-02 23:07 2075Netbeans的SVN插件,最后一次更新是07年了,所以它根 ...
相关推荐
【在Eclipse上使用XFire开发WebService】 在IT行业中,Web Service是一种常见的软件接口技术,允许不同系统之间通过网络进行通信和数据交换。Eclipse是一款强大的集成开发环境(IDE),而XFire则是一个免费的开源...
2. **创建Maven项目**:使用IDE(如IntelliJ IDEA或Eclipse)创建一个新的Maven项目。 3. **添加依赖**:在pom.xml文件中添加XFire的相关依赖,例如: ```xml <groupId>org.codehaus.xfire <artifactId>xfire...
### Eclipse上使用XFire开发WebService知识点详解 #### 一、概述 本文主要介绍如何在Eclipse平台上使用XFire框架来开发WebService。通过本教程的学习,读者可以了解到搭建环境的具体步骤,以及实现一个简单的...
在这个“在Eclipse下用xfire创建webserver服务器demo”中,我们学习了如何在Eclipse环境中配置Xfire,创建一个简单的Web服务,以及如何启动和测试这个服务。这只是一个基础的起点,Xfire还支持许多高级特性,如WS-...
**XFire初识:使用Eclipse开发WebService** 在IT行业中,WebService是一种允许应用程序之间进行交互的标准化技术。它通过XML(可扩展标记语言)来交换数据,使得不同平台上的应用能够无缝对接。XFire是Java平台上一...
这个资源是一个关于使用XFire框架创建Web服务的实际示例项目。XFire是早期流行的一个用于构建SOAP Web服务的Java库,它提供了轻量级且高效的解决方案。由于描述中提到“不包含xfire相关jar包”,这意味着用户在运行...
本教程将详细讲解如何在Eclipse下使用Web服务,主要涉及的技术包括Java、Web服务(Webservice)、XFire框架以及Eclipse IDE的使用。 一、建立Web Service Project 在Eclipse中创建一个新的项目,选择“Web Service ...
3. **示例代码和文档**:为了帮助开发者理解和使用XFire,包中可能会包含一些示例服务代码和详细的API文档,介绍如何创建服务端点、处理请求和响应等。 4. **配置文件**:XFire的配置文件(如xfire.xml)用于定义...
在这个主题中,我们将深入探讨如何使用Xfire创建Web服务以及客户端的实现,同时结合MyEclipse 6.5集成开发环境(IDE)和Tomcat 6.0应用服务器。 1. **Xfire简介** Xfire是Apache CXF项目的一部分,它提供了一个...
可以使用Eclipse集成开发环境并安装Xfire插件。按照以下步骤操作: 1. **安装Xfire Eclipse插件** 打开Eclipse的Help菜单,选择Update Site,输入更新URL:http://dist.codehaus.org/xfire/update/。安装并重启...
在【压缩包子文件的文件名称列表】中,"WebServiceDemo"可能是项目的主目录或者模块名,这可能包含了一系列的源代码、配置文件、测试用例以及相关的资源文件,用于演示如何使用XFire在Eclipse中创建和运行Web服务。...
5. 配置XFire:在项目的src/main/resources目录下创建一个名为`services.xml`的文件,配置XFire如何暴露你的服务。在这个文件中,你需要定义服务的名称、接口类和实现类。 6. 部署服务:运行你的Java应用,XFire将...
### WebService学习手册知识点概述 ...综上所述,本文档详细介绍了如何使用Xfire、CXF、Axis等框架开发WebService,通过一系列的示例代码和实践指导,即使是初学者也能快速掌握这些技能,并能够在实际项目中运用自如。
本文将通过一个具体实例介绍如何在MyEclipse环境下使用XFire框架来快速搭建WebService应用。本例涉及的关键技术包括Eclipse IDE、Tomcat服务器、Java编程语言以及XFire框架。目标是在短时间内完成一个简单的...
【标题】"xfire+spring+webservice例子"是一个典型的示例项目,它演示了如何在Java环境中结合XFire和Spring框架来创建和消费Web服务。这个项目旨在帮助开发者理解和实践基于Spring的Web服务实现,同时也展示了XFire...
1. webservice xfire的完整demo,下载后可以直接导入eclipse调试。 2. 包括客户端和服务端,服务端需要部署到tomcat等web容器,启动服务端后可以通过客户端测试调用结果。 3. 工程已经将依赖的jar包一起包含,不需要...