关于基于xfire webservice框架开发webservice的总结
基础条件:依赖包和插件
http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip
开发环境:myeclipse7.5 +tomcat6.0
插件:xfire插件
包括服务器端的开发和客户端的调用代码的开发
一、 服务器端开发
1. 开发服务接口
package com.mybank.xfire.example;
public interface IBankingService {
public String transferFunds(String fromAccount, String toAccount,
double amount, String currency);
}
2. 开发服务接口实现类
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;
}
}
3. 接口和实现类的配置
配置文件中加入实现类和接口的配置
配置文件名称为services.xml,其位置为WEB-INF/classes/META-INF/xfire/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>
注意:<name>Banking</name> 这个Banking
4. web.xml中配置xfire的servlet.
web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
注意:servlet配置和url映射
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
5. 发布后测试:
http://192.168.63.187:8080/webservice/services/Banking?wsdl
返回如下:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="mybank" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="mybank" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="mybank">
<xsd:element name="transferFunds">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1" name="in1" nillable="true" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1" name="in2" type="xsd:double"/>
<xsd:element maxOccurs="1" minOccurs="1" name="in3" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="transferFundsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="transferFundsResponse">
<wsdl:part name="parameters" element="tns:transferFundsResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="transferFundsRequest">
<wsdl:part name="parameters" element="tns:transferFunds">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="BankingPortType">
<wsdl:operation name="transferFunds">
<wsdl:input name="transferFundsRequest" message="tns:transferFundsRequest">
</wsdl:input>
<wsdl:output name="transferFundsResponse" message="tns:transferFundsResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BankingHttpBinding" type="tns:BankingPortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="transferFunds">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="transferFundsRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="transferFundsResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Banking">
<wsdl:port name="BankingHttpPort" binding="tns:BankingHttpBinding">
<wsdlsoap:address location="http://192.168.63.187:8080/webservice/services/Banking"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
则表示发布成功。
至此,服务器端开发全部完成。
二、客户端调用代码的开发
包括以下几种方式
1. 如果能够知道并得到service的类,那么可以在客户端中通过xfier的代理工厂生成service类。然后调用相应的方法。(有服务的代码)
package com.mybank.xfire.example;
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;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Client c=new Client();
String ret;
try {
ret = c.callWebService("111", "222", 1.1d, "aaaaa");
System.out.println("s="+ret);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
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://192.168.63.187:8080/webservice/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;
}
}
2. 没有服务的代码,则可以通过xfire插件,自动生成相关的客户端代码
插件的地址和安装
利用xfire生成web服务客户端的方法有多种,Eclipse Plugin为XFire的WSDL->Code generator提供了Eclipse支持,它需要Eclipse 3.2和Java 5。这里我们用Eclipse Plugin根据wsdl文件地址生成客户端代码,而我们只需要编写几行代码即可实现调用web服务。下面就是方法步骤:
第一步,安装插件。
打开Eclipse的Help菜单,选择”Software Updates”,然后再选择”Find and Install.”
选择"Search for new features to install",然后点击Next
选择"Create New Remote Site", 在name中输入"XFire",在eclipse update site中输入http://dist.codehaus.org/xfire/update/
选择OK
选择Finish。
注意完成上述操作后,eclipse要下载和安装插件,时间长短要视网速而定,请耐心等待,安装完成时还要重启eclipse。
第二步,使用插件。
首先新建一个java项目XFireProject,然后依次选择菜单File->New->Other ,选择XFire文件夹下的Code generation from WSDL document,打开代码生成向导.
输入wsdl 地址,选择 生成类所在类的包,执行可自动生成一系列文件。其中有XXXXXXclient的类即可调用代码,
package com.yanek.test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BankingClient bc=new BankingClient();
System.out.println("xxxyyyy="+bc.getBankingHttpPort().transferFunds("aaa", "bbb", 1.0d, "11111111"));
}
}
其中BankingClient为自动生成的代码
http://192.168.63.187:8080/webservice/services/Banking?wsdl
需要导入xfire相关jar和apache comm包。
3. 三,由于service类在很多情况下并不是只有自己开发的。这时候很有可能你没有办法得到service类,但是service发布的wsdl文件是可以得到,xfire可以通过wsdl生成client。这里又包含两种方式,第一,把wsdl下载下来到本地的classpath。通过读取wsdl生成。或者,可以直接通过url来生成。这里说明第二种情况
http://192.168.63.187:8080/webservice/services/Banking?wsdl
package com.yane.test;
import java.net.HttpURLConnection;
import java.net.URL;
import org.codehaus.xfire.client.Client;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Test test=new Test();
String a=test.transferFunds("111", "222", 1.1d, "aaaaa");
System.out.println("xxxxxxx="+a);
}
public String transferFunds(
String fromAccount, String toAccount, double amount, String currency)
{
try{
String wsdl = "http://192.168.63.187:8080/webservice/services/Banking?wsdl";
URL url = new URL(wsdl);
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();
httpConnection.connect();
Client client = new Client(httpConnection.getInputStream(),null);
Object []results = client.invoke("transferFunds", new Object[]{fromAccount,toAccount,amount,currency});
return (String)results[0];
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
其中,
Object []results = client.invoke("transferFunds", new Object[]{fromAccount,toAccount,amount,currency}
中transferFunds为方法名, new Object[]{fromAccount,toAccount,amount,currency} 为对象参数值
分享到:
相关推荐
总的来说,"基于xfire技术框架的WebService完整源码及数据库备份"涵盖了从Web服务基础概念到具体开发实践的多个层面,是学习和研究Web服务开发的一个宝贵资源。通过深入学习和分析,开发者不仅可以掌握Web服务的开发...
这个基于XFire的WebService项目,可能是为了演示如何利用XFire框架来构建和部署Web服务,以及如何与其他系统进行交互。 【描述】:虽然描述为空,但我们可以推断,这个项目可能包括了以下几个关键步骤和概念: 1. ...
《Xfire WebService框架搭建详解》 Xfire是一款开源的Java WebService框架,它提供了简单且高效的构建和消费Web服务的能力。本指南将详细介绍如何利用Xfire搭建服务器端和客户端,以便于理解并掌握其核心功能。 ##...
XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 webService 接口。 服务端(为客户端提供 webservice 接口) 在服务端,我们需要...
总结来说,基于XFire的WebService开发提供了简洁、高效的Java Web服务解决方案。通过利用注解、Spring集成以及强大的客户端支持,XFire降低了开发复杂性,使得开发者能更专注于业务逻辑而不是底层的通信细节。无论是...
XFire是Apache CXF的前身,其设计目标是简化Web服务的开发过程,提供基于XML的消息传递。XFire通过利用Java注解(Annotations)和动态代理(Dynamic Proxies)技术,使得开发者可以轻松地将Java方法暴露为Web服务。...
XFire Webservice是一个基于Java的开源工具,它简化了创建、部署和消费Web服务的过程。在深入探讨这个完整实例之前,我们首先需要了解Web服务的基本概念。Web服务是一种通过网络进行通信的应用程序接口(API)。它们...
### WebService开发技术详解:基于xFire框架 #### 一、概述 WebService是一种跨平台、跨语言的网络通信协议,允许不同系统之间进行数据交换和功能调用。它基于XML和HTTP,支持SOAP(Simple Object Access Protocol...
XFire是Java平台上的一个开源WebService框架,由Codehaus组织开发。XFire以其轻量级、高效和易于使用的特性,成为开发者在构建WebService时的一个优选。XFire支持多种协议,包括SOAP、RESTful风格的服务,以及JAXB、...
标题中的“xfire webservice集成最少8个包”指的是在使用XFire框架开发Web服务时,所需的最小依赖库数量。XFire是早期流行的Java Web服务实现框架,它允许开发者快速创建、部署和消费Web服务。这里提到的8个包可能...
spring集成xfire webservice实现远程调用 将项目发布后,点击http://localhost:8080/SpringWebServiceTest/services/HelloWS?wsdl即可 其中也有客户端的调用,自己试试吧。
在开始之前,确保你的开发环境中已经包含了XFire的库。你可以通过Maven或Gradle将其添加到项目的依赖中。然后,你需要在Spring配置文件中声明XFire的相关bean,例如`XFireConfigurer`和`XFireServiceExporter`,...
### MyEclipse 8.0 GA 下使用 Xfire 框架开发 WebService 实例 #### 一、WebService 服务端开发步骤 ##### 1. 建立 WebService Project - 在 MyEclipse 中创建一个新的 Web Service 项目,命名为 ProjectName。 -...
**XFIRE Webservice 开发实例详解** 在信息技术领域,Webservice是一种基于互联网的、平台无关的交互方式,它允许不同的应用程序之间进行数据交换和功能共享。而XFIRE是一款专为游戏社区设计的软件,它提供了丰富的...
【标题】"用XFire开发WebService+Spring注解"涉及的主要知识点是利用XFire框架创建Web服务,并结合Spring框架的注解进行服务的管理和集成。XFire是一个强大的Java Web Service实现,它允许开发者轻松地创建和消费...
总结,XFire作为一款早期的Web服务框架,对Java开发者来说是一个快速上手Web服务的良好选择。虽然现在可能不再是最新的选择,但理解其工作原理和使用方法,对于理解Web服务的基本概念和开发流程仍然具有重要意义。...
xfire是一款基于Java的开源WebService框架,它提供了一个简单、灵活和高效的方式来开发和部署WebService。xfire可以与多种类型的WebService结合使用,如SOAP、REST、XML-RPC等。xfire还提供了一个基于annotation的...
总结来说,利用XFire和MyEclipse开发Web服务是一种高效的方法,尤其对于初学者,XFire的简洁性和易用性使其成为学习Web服务开发的理想选择。通过以上步骤,你可以轻松地构建并部署自己的第一个Web服务。
【XFire WebService开发DEMO】是一个用于演示如何利用XFire框架来开发Web服务的实例。Web服务是一种基于网络的、平台无关的软件接口,它允许不同系统间的应用程序进行交互和数据交换。XFire,是Java社区早期的一个...