XFire实现webservice
- 格式:doc
- 大小:35.50 KB
- 文档页数:4
使用XFire开发webservice服务和客户端全攻略收藏XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service 各项标准协议,帮助你方便快速地开发Web Service应用。
相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社区拥有众多的追随者。
并且因为XFire为Spring提供的支持,使得我们可以很容易在Spring中使用XFire构建Web Service应用。
XFire 与Axis2相比具有如下特征:l 支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security 等;l 使用Stax解释XML,性能有了质的提高。
XFire采用Woodstox 作Stax实现;l 容易上手,可以方便快速地从pojo发布服务;l 支持Spring、Pico、Plexus、Loom等容器;l 灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor;l 高性能的SOAP 栈设计;l 支持Spring、Pico、Plexus、Loom等容器。
XFire 与Axis1性能的比较如下:l XFire 比Axis1.3快2-6倍;l XFire 的响应时间是Axis1.3的1/2到1/5。
XFire 在WebService框架中开始较晚,它从现有的框架中借鉴了许多优秀的理念,力争将Web Service的应用开发难度降到最低。
此外,还提供了各种绑定技术、支持多种传输协议,对WebService体系中许多新的规范提供了支持。
下面让我们来看一个XFire于Spring集成的helloWorld的简单例子。
一.实现的功能和特点本例具有如下功能和特点:1)基于J2EE平台的Web Service服务;2)开发方便,配置简单;3)与spring无缝集成。
目录一使用Axis和XFire发布Web Service (2)1.1 准备工作 (2)1.1.1 新建工程 (2)1.1.2 axis依赖文件 (3)1.1.3 XFire依赖文件 (3)1.2 Axis发布Web Service (4)1.2.1 传递简单数据类型的Web Service (4)1.2.2 带自定义对象传递的Web Service (8)1.3 XFire发布Web Services (10)1.3.1 传递简单数据类型的Web Service (10)1.3.2传递复杂数据类型的Web Service (12)附录: 1Server的结构 (16)二调用Web Services (17)2.1 准备工作 (17)2.1.1 新建工程 (17)2.1.2 启动Tomcat上发布的1Server服务 (17)2.2 Axis发布的Web Service调用方式 (18)2.2.1 Dynamic Invocation Interface (DII)方式 (18)2.2.2 Dynamic Proxy方式 (19)2.2.3 Stubs方式 (20)2.3调用XFire发布的Web Service (22)2.3.1服务以jar包形式发布的时候直接调用 (23)2.3.2 使用Axis的Client包 (23)2.3.3 使用Xfire的Client包 (24)附录2:2Client目录结构 (31)一使用Axis和XFire发布Web Service 1.1 准备工作Axis主页:/Axis下载:/dist/ws/XFire主页:/XFire下载:/Download去以上站点下载axis最新包和XFire最新包,包内有axis和XFire依赖的其他jar包。
1.1.1 新建工程1.1.2 axis依赖文件1.1.3 XFire依赖文件1.2 Axis发布Web Service1.2.1 传递简单数据类型的Web Service1.把Axis依赖的jar包放入lib文件夹下.2.在web.xml中加入如下:<!-- ****************** axis ws start ****************** --> <listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener </listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><!--<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>--><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/TR/2003/WD-wsdl12-20030303/#ietf-draftfor now we go with the basic 'it's XML' response -->3.发布到Tomcat5.0+ 启动Tomcat服务启动的时候若出现下面错误。
如何在MyEclipse和Eclipse下安装XFire插件CXF插件 WebService首先,现在都用CFX了(CFX部分源于XFire)吧,所以建议大家使用CXF,本文后面讲XFire安装……CXF的安装参见:Apache CXF: An Open-Source Services Framework /源文件的下载在/download.html博客更新时最新为2.42 一共两个文件,要下载的是其中的二进制下载包,也就是Binary distribution,下载File下的zip(for win)或者tar.gz(for linux)我用的是winXP下载完成后按照如下配置:将你的Binary distribution加压至任意文件夹(将被设为%CXF_HOME%)我的电脑->属性->高级->环境变量创建一个CXF_HOME变量,值为CXF框架所在根目录,修改一下CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin; 以方便在DOS窗口下直接运行java2ws,wsdl2java等可执行文件。
在%JAVA_HOME%/jre/lib目录下创建一下endorsed文件夹,将jaxb-api.jar,jaxws.jar拷贝进去。
(建议在%CXF_HOME%的文件夹中搜索endorsed,就包括这两个文件,当然,你也可以直接将这个路径包含在%CXF_HOME%\lib\endorsed包含在CLASSPATH中尝试一下,我没有试过)配置好了后,你在DOS窗口下输入java2ws,看看配置是否有效,有效会提示Missing argument: classname。
这样就OK了。
MyEclipse安装XFire要进行基于XFire的开发,需要在MyEclipse或者Eclipse里安装XFire,但是网上基本没有安装插件的说明,在这里做一个介绍:在Eclipse里添加XFire,请遵照XFire官网说明/Eclipse+Plugin进行安装在MyEclipse (9.0)骤如下:进入help->MyEclipse Configer Center ,点选Software选项卡,左侧有个Browse Software,点击导航右侧的 Add Site,弹出对话框,填入名称“XFire”(任填)和站点"/xfire/update/",点击确定,稍等片刻,你会发现在Browse Software下多了XFire的两个选项(只是找到,还没安装),OK,分别双击这两个选项,这连个添加会排程到等待更新的列表中,也就是页面右下角的Software Updates Aviables里面(其实有一个确实已经在MyEclipse里面安装了,所以应该只有一个更新),在单选框中打对勾,然后更新,会弹出更新向导,然后默认的Next Next就可以了……新建一个工程,在工程添加向导里你可能看不到XFire的选项,不急,在工程添加完成后,在工程上右键,在菜单上会出现“为该工程配置XFire”特性,在这里设置就好了……针对之前没说清楚,在这里补充这一点……完……安装完毕,新建工程,右键->添加XFire支持虽然不能从新建工程向导中配置,也没问题,恩恩完……。
一、介绍Web服务(WebService)指的是一种基于网络的标准化协议,用于在不同应用程序之间进行通信和交换数据。
在现代的软件开发中,Web服务已经成为了一种非常重要的技术。
而Web服务的实现方式多种多样,下面我们将介绍一些常见的Web服务实现方式。
二、SOAPSOAP(Simple Object Access Protocol)是一种基于XML的通信协议,它允许不同的应用程序在网络上进行数据交换。
SOAP通常基于HTTP协议进行通信,使用XML格式来打包和传输数据。
要使用SOAP来实现Web服务,需要定义消息的格式、接口的定义和基于WSDL的描述文件。
SOAP在传输数据时使用了XML格式,因此相对于其他方式,它的数据传输效率可能会略低。
三、RESTfulRESTful是一种基于资源的Web服务架构风格,它假定Web应用程序的基本操作包括对资源的读取、创建、更新和删除。
与SOAP不同,RESTful服务使用标准的HTTP方法来操作资源,比如GET、POST、PUT和DELETE。
它通常使用JSON或XML格式来传输数据。
相比于SOAP,RESTful更加简洁、灵活,而且性能更好。
因此在Web开发中越来越多地采用RESTful作为Web服务的实现方式。
四、JSON-RPCJSON-RPC是一种基于JSON格式的轻量级远程过程调用协议。
与SOAP类似,JSON-RPC也是一种用于在不同应用程序之间进行通信的协议。
JSON-RPC的消息格式非常简洁,通常只包括方法名、参数和返回值,因此在Web服务的实现中往往更加高效。
五、gRPCgRPC是由谷歌开发的一种高性能、开源的远程过程调用框架。
它支持多种编程语言,并且基于HTTP/2协议进行通信。
gRPC的消息格式可以使Protocol Buffers,它相比于XML和JSON格式更加高效。
gRPC支持双向流式传输,使得它在某些场景下性能表现更加优越。
六、总结在实际的软件开发中,我们可以根据具体的需求和场景选择合适的Web服务实现方式。
WebService接口说明文档文档说明本文档主要讲述如何用C Sharp创建一个简单的Web Service接口,并使用Java调用这个Web Service接口。
准备工作系统环境:安装JDK1.6或更新版本开发工具:Microsoft Visual Studio 2012、MyEclipse 10.5、axis2-1.6.2C Sharp服务端1.首先,创建一个Web Service项目。
依次点击:文件—新建—项目,在弹出的新建项目窗口中选择Web下的 空 Web 应用程序。
如下图:2.接下来我们需要创建我们的Web Service接口实现文件。
鼠标右击我们的项目,依次点击:添加—新建项,在弹出窗口中选择Web 服务。
可修改新建项的文件名,注意文件名后缀后.asmx。
如下图:新建完成后我们的项目结构如下:3.打开我们新建的MyService.asmx下的MyService.asmx.cs文件,可以看到其中已经有默认的HelloWorld方法。
我们可以直接运行查看下运行的效果,效果如下图:点击HelloWorld,再点击调用可以看到页面返回:4.接下来我们完善我们的Web Service接口功能。
主要对Web Service接口进行参数类型的测试,文本型、布尔型、数值型、类(Class)等。
新增Add()等运算方法:新增strcat()连接字符串方法:新增GetBool()返回布尔值方法:新增GetTest()返回测试类,并新增Test类运行我们的项目,可以看到我们的结果如下图:点击add方法测试:输入add的参数i和j点击调用按钮,可以看到返回计算结果:5.到此为止我们C Sharp创建的Web Service程序完成。
接下来看Java如何调用我们的Web Service接口。
Java调用Web Service准备对于一个Web Service接口我们当前只知道访问的地址,我们如何用Java去访问接口呢?已知Web Service接口地址:http://localhost:11766/MyService.asmx?WSDLJava调用Web Service的方式有以下1.使用HttpClient2.使用Xfire3.使用axis2本文档示例选择的是axis2,首先到axis2网站下载axis2,网址:/axis2/java/core/download.cgi当前最新版本1.6.2。
.net framework调用webservice接口步骤在.NETFramework中,调用Webservice接口是一项重要的任务,它允许我们与远程服务器进行通信,执行特定的操作并获取结果。
下面是一个详细的步骤指南,指导您如何在.NETFramework中调用Webservice接口:步骤1:添加Webservice引用首先,您需要将Webservice的URL添加到项目中,以便在代码中引用它。
您可以使用“添加服务引用”对话框来完成此操作。
在VisualStudio中,导航到“服务”选项卡,然后选择“添加服务引用”。
在URL框中,输入Webservice的URL地址,并确保选择正确的协议(如HTTP或SOAP)。
步骤2:创建代理类一旦您添加了Webservice引用,VisualStudio将为您生成一个代理类。
这个类将包含用于与Webservice交互的方法。
您可以使用这个代理类来调用Webservice的方法。
步骤3:编写代码调用Webservice方法接下来,您需要编写代码来调用Webservice的方法。
通常,这些方法使用SOAP(SimpleObjectAccessProtocol)格式,并返回XML数据。
您可以使用代理类中的方法来执行此操作。
以下是一个简单的示例代码,展示了如何调用一个名为“MyWebService”的Webservice的方法:```csharp//创建代理对象MyWebServiceClientclient=newMyWebServiceClient();//调用方法并获取结果stringresult=client.MyWebServiceMethod();```在这个示例中,“MyWebServiceClient”是自动生成的代理类,而“MyWebServiceMethod”是您要调用的Webservice方法。
您需要将实际方法的名称替换为适当的名称。
步骤4:处理返回结果一旦您调用了Webservice方法并获得了结果,您需要对其进行适当的处理。
WebService 四种发布方式总结Author:yczhang1.CXF方式CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6。
1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6。
2。
jar”报错,报的错为:ng。
IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!!!使用cxf+spring搭建WebService:第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:而泰康的was环境则需要如下jar包:明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复.第二步,配置web.xml文件,如下(重要的地方已标记):〈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〉〈!—- Character Encoding filter --〉<filter〉〈filter—name〉encodingFilter</filter-name〉<filter-class>org.springframework。
Web Service框架XFire与Tomcat集成刘岩虽然XFire 已经过时,但是无奈上个公司的项目用的是jdk1.4,所以我只能选择了老战车XFire 进行Web Service 的开发。
首先先用MyEclipse 建立一个web 项目,如图所示:利用myeclipse 为web 项目添加xfire 的支持,如图。
1一直点击默认即可,虽然这里是利用myeclipse 插件进行的辅助添加,但是我们还是有必要看一下myeclipse 为我们做了什么,添加了哪些jar 包。
有关xfire 的核心jar 包如下图:您最好还是看看都有哪些jar 包,要不你的项目经理哪天该说了:“小X 啊?你看看哪些jar2包是不必要的,咱们的服务器空间可不够啊…………”。
连服务器的空间都放不下几十兆的jar 包,我只能了。
再来看/WebServices/services.xml ,这个文件在真正环境中是会被放到到/WebRoot/WEB-INF/classes/META-INF/xfire 下面,这个类似于Spring 在web 项目中的配置文件。
这个文件是配置你要暴露的web service 的文件的,稍后还会详细阐述。
下面我们看看web.xml 修改了些什么东西,web.xml 内容如下:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"version="2.4"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.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,此XFireServlet 拦截了所有关于/services/*的请求,所以对外系统开放的web service 的url 基本上都是” http;//127.0.0.1:端口/项目/services/服务名”的形式。
webservice实现有多种方式比如最常用的有axis框架,xfire框架,通过该框架可以发布wsdl接口,也可以实现webservice客户端,目前eclipse都有集成的插件,可以根据wsdl文件生成webservice客户端调用接口,但是这样部署的时候必须依赖框架的jar包,有时候可能因为环境等等原因,我们仅仅需要wsdl中的某一个接口,这时候可以通过http接口或socket接口直接发生xml 数据,来调用服务端webservice服务,其实webservice底层还是发送xml数据,只是框架封装了对xml数据进行序列化与反序列化操作,下面以两个简单的例子说明http方式和socket方式。
http实现webservice接口调用例子:[c-sharp]view plain copy1.import <a href="/base/17"class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.Buffe redReader;2.import java.io.IOException;3.import java.io.InputStreamReader;4.import java.io.OutputStreamWriter;5.import java.io.UnsupportedEncodingException;6.import .MalformedURLException;7.import .URL;8.import .URLConnection;9.10.public class HttpPostTest {11.void testPost(String urlStr) {12.try {13. URL url = new URL(urlStr);14. URLConnection con = url.openConnection();15. con.setDoOutput(true);16. con.setRequestProperty("Pragma:", "no-cache");17. con.setRequestProperty("Cache-Control", "no-cache");18. con.setRequestProperty("Content-Type", "text/xml");19.20. OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());21. String xmlInfo = getXmlInfo();22.out.write(new String(xmlInfo));23.out.flush();24.out.close();25. BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));26. String line = "";27. StringBuffer buf = new StringBuffer();28.for (line = br.readLine(); line != null; line = br.readLine()) {29. buf.append(new String(line.getBytes(),"UTF-8"));30. }31. System.out.println(buf.toString());32. } catch (MalformedURLException e) {33. e.printStackTrace();34. } catch (IOException e) {35. e.printStackTrace();36. }37. }38.39.private String getXmlInfo() {40.// 通过wsdl文件可以查看接口xml格式数据,构造调用接口xml数据41. String xml = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=/"http://schemas.xml/soap/envelope//" xmlns:SOAP-ENC=/"/soap/e ncoding//" xmlns:xsi=/"/2001/XMLSchema-instance/" xmlns:xsd =/"/2001/XMLSchema/">"42. + "<SOAP-ENV:Body>"43. + "<m:getItemDetailSingle xmlns:m=/"http:xxxxxxxxxxxxxxxxxx//">"44. + "<itemMo>"45. + "<category>工厂类</category>"46. + "<city>北京</city>"47. + "<flag>1</flag>"48. + "<itemId>0</itemId>"49. + "<itemIndex>1</itemIndex>"50. + "<keyword></keyword>"51. + "<mobile>2147483647</mobile>"52. + "<password>123456</password>"53. + "<userName>sohu</userName>"54. + "</itemMo>"55. + "</m:getItemDetailSingle>"56. + "</SOAP-ENV:Body>"57. + "</SOAP-ENV:Envelope>";58.return xml;59. }60.61.public static void main(String[] args) throws UnsupportedEncodingException {62. String url = "http://localhost:9003/dataService/services/Job";63.new HttpPostTest().testPost(url);64. }65.}socke方式实现例子:[c-sharp]view plain copy1.import java.io.IOException;2.import java.io.InputStream;3.import java.io.InputStreamReader;4.import java.io.OutputStream;5.import .Socket;6.import .UnknownHostException;7.8.9.public class WebServiceClient {10.11./**12. * @param args13. * @throws IOException14. * @throws UnknownHostException15. */16.public static void main(String[] args) throws UnknownHostException, IOException {17. Socket socket = new Socket("localhost",9003);18. OutputStream os = socket.getOutputStream();19. InputStream is = socket.getInputStream();20.//System.out.println(socket.isConnected());21. String httpSend = "POST /dataService/services/Job HTTP/1.1/r/n"22. + "Content-Type:text/xml/r/n"23. + "Host:localhost:9003/r/n"24. + "Content-Length:1024/r/n"25. + "/r/n"26. + "<SOAP-ENV:Envelope xmlns:SOAP-ENV=/"http://schema/soap/envelope//" xmlns:SOAP-ENC=/"/s oap/encoding//" xmlns:xsi=/"/2001/XMLSchema-instance/" xmln s:xsd=/"/2001/XMLSchema/">"27. + "<SOAP-ENV:Body>"28. + "<m:getItemDetailSingle xmlns:m=/"http://localhost//">"29. + "<itemMo>"30. + "<category>工厂类</category>"31. + "<city>北京</city>"32. + "<flag>1</flag>"33. + "<itemId>0</itemId>"34. + "<itemIndex>1</itemIndex>"35. + "<keyword>String</keyword>"36. + "<mobile>2147483647</mobile>"37. + "<password>123456</password>"38. + "<userName>sohu</userName>"39. + "</itemMo>"40. + "</m:getItemDetailSingle>"41. + "</SOAP-ENV:Body>"42. + "</SOAP-ENV:Envelope>";43. os.write(httpSend.getBytes());44. os.flush();45.46. InputStreamReader ireader = new InputStreamReader(is);47. java.io.BufferedReader breader = new java.io.BufferedReader(ireader);48.49. String responseLine = "";50.51.while((responseLine = breader.readLine()) != null)52. {53. System.out.println(new String(responseLine.getBytes(),"UTF-8"));54. }55.56. System.out.println("");57.58. }59.60.}。
使用XFire实现webservice1 导入必要的包在eclipse里面导入xfire核心包导入xfire http client libraries包或下载XFire1.2.6,解压缩后单独导入下载xalan-j_2_7_1-bin-2jars.zip解压缩后放到tomcat/common/endorsed下数据库:数据源名字:accp数据库名字:Account字段:creditcard varchar(50)balance int2做一个接口package y2javaee.sg.ch09;public interface IProcessCredit {int creditProcess(String creditCard, double total);}做一个接口的实现类,类中定义了具体的web服务业务逻辑package com;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import y2javaee.sg.ch05.ConnectionManager;public class ProcessCreditCard implements IProcessCredit{public int creditProcess(String creditCard, double total){int result = 0;Connection con = null;PreparedStatement pStatement = null;try {con = ConnectionManager.getConnction();String strSql = "update Account "+ "set balance = balance - ? where creditcard = ?";pStatement = con.prepareStatement(strSql);pStatement.setDouble(1, total);pStatement.setString(2, creditCard);System.out.println(strSql);result = pStatement.executeUpdate();} catch (SQLException sqlE) {sqlE.printStackTrace();} finally {ConnectionManager.closeStatement(pStatement);ConnectionManager.closeConnection(con);}return result;}}3 在src下手动创建/META-INF/xfire/services.xml,然后刷新工程,输入以下内容<beans xmlns="/config/1.0"><service><name>CreditCard</name><namespace>/CreditCard</namespace><serviceClass>sell.IProcessCredit</serviceClass><implementationClass>sell.ProcessCreditCard</implementationClass></service></beans>4 修改web.xml<servlet><servlet-name>XFireServlet</servlet-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> </servlet><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/servlet/XFireServlet/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>////////////////////////////////////////////////察看webservice是否可用可以输入地址http://localhost:7000/sell/services/CreditCard?wsdl如果看到wsdl文件,说明服务可用///////////////////////////////////////////////调用service程序,做一个普通的servletimport java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import .MalformedURLException;import org.codehaus.xfire.XFire;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.aegis.AbstractXFireAegisTest;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.ServiceFactory;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import org.codehaus.xfire.service.invoker.ObjectInvoker;import javax.servlet.http.*;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取会话HttpSession session = request.getSession();// 读取订单的参数//String creditcard = request.getParameter("creditcard");String creditcard ="1001";//double total = ((Double) session.getAttribute("total")).doubleV alue();double total=1000;// 创建服务的元数据Service serviceModel = new ObjectServiceFactory().create(IProcessCredit.class);System.out.println("返回了服务的模型.");// 创建服务的代理XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire);String serviceUrl = "http://localhost:8088/store/services/CreditCard";// 服务的地址IProcessCredit client = null;try {client = (IProcessCredit) factory.create(serviceModel, serviceUrl);} catch (MalformedURLException e) {System.out.println("客户端调用异常: " + e.toString());}// 调用服务int serviceResponse = 0;try {serviceResponse = client.creditProcess(creditcard, total);System.out.println("WsClient.callWebService(): status="+ serviceResponse);} catch (Exception e) {System.out.println("WsClient.callWebService(): EXCEPTION: "+ e.toString());}if (serviceResponse == 1) {request.getRequestDispatcher("/ch09/bye.jsp").forward(request,response);} else {request.getRequestDispatcher("/ch09/error.jsp").forward(request,response);}session.invalidate();}。