XFire完整入门教程
- 格式:doc
- 大小:180.50 KB
- 文档页数:7
wsdlDocumentURL 代表wsdl所对应的URL1、通过URLConnection创建连接,然后invoke相应接口优点:调用简单缺点:传递封装对象比较麻烦[java]view plaincopyprint?1.// wsdlDocumentURL必须是全地址(包含?wsdl)2.URL url = new URL(wsdlDocumentURL);3.URLConnection connection = url.openConnection();4.Client client = new Client(connection.getInputStream(), null);5.// invoke接口方法6.// 接口返回Object数组7.Object[] result = client.invoke("methodName", new Object[]{});[java]view plaincopyprint?.codehaus.xfire.service.Service serviceModel = new ObjectServiceFactory().create(接口.class);2.XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());3.IEmailBindHandlerService handler = (IEmailBindHandlerService) factory.create(serviceModel, wsdlURL);2、XFireProxyFactory创建客户端实例客户端需要明确知道接口详细信息[java]view plaincopyprint?.codehaus.xfire.service.Service serviceModel = new ObjectServiceFactory().create(IEmailBindHandlerService.class);2.XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());3.接口 handler = (IEmailBindHandlerService) factory.create(serviceModel, wsdl地址);3、通过eclipse自动生成webservice client4、通过org.codehaus.xfire.spring.remoting.XFireClientFactoryBean构建客户端实例[java]view plaincopyprint?1.<bean id="baseService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean" abstract="true">2. <property name="serviceFactory" ref="xfire.serviceFactory" />3. <!-- <property name="lookupServiceOnStartup" value="false" /> -->4. <property name="properties">5. <props>6. <!-- 等待HttpConnectionManager从连接池中返回空闲连接的超时时间 -->7. <prop key="http.connection.manager.timeout">1000</prop>8. <!-- 等待建立连接的超时时间 -->9. <prop key="http.connection.timeout">3000</prop>10. <!-- 等待服务器返回数据超时时间 -->11. <prop key="http.timeout">10000</prop>12. <!-- 连接到单个服务器的连接数上限 -->13. <prop key="max.connections.per.host">10</prop>14. <!-- 连接到所有服务器的连接个数上限 -->15. <prop key="max.total.connections">80</prop>16. </props>17. </property>18. </bean>19.20. <bean id="接口实例" parent="baseService">21. <property name="serviceClass" value="接口地址" />22. <property name="wsdlDocumentUrl" value="${xfireServerURL}/webservice名称?wsdl" />23. </bean>使用该配置方法的话,可以通过注入实现调用,同时可以减少手动创建URLConnection之后忘记关闭连接的尴尬只是如果使用该方法的时候,需要在web.xml中添加如下配置[java]view plaincopyprint?1.<context-param>2. <param-name>contextConfigLocation</param-name>3. <param-value>classpath:org/codehaus/xfire/spring/xfire.xml</param-value>4.</context-param>。
Eclipse下使用Xfire创建WebService入门示例(上)关键字: Eclipse Xfire Java WebServiceWeb Service概述什么是Web ServiceWeb Service是能够基于网络,尤其是基于万维网(World Wide Web)直接调用的能够处理离散任务或连续任务的软件模型。
目前较为流行的应用是,由一家公司对其专有数据进行封装,提供Web Service,然后其它公司就可以通过Internet来动态使用这些在线服务。
这为未来全球的电子商务发展提供了新的标准和架构。
Web Service架构Web Service是独立的、模块化的应用,能够通过因特网来描述、发布、定位以及调用。
在Web Service的体系架构中包括三个角色:服务提供者(Service Provider)、服务请求者(Service Requestor)、服务注册器(Service Registry)。
角色间主要有三个操作:发布(Publish)、查找(Find)、绑定(Bind)。
下图清楚的描述了三种角色,以及角色之间的作用关系。
图示一:图示二:这个流程图显示了Web Services中的核心技术是如何工作的。
这里,Provider是提供服务的应用程序组件,Requester是使用服务的客户端程序。
很多其他技术也会参与到交互中,但是这个图只显示了在Web Services环境中必需的核心技术组件。
Web Service协议标准简单对象访问协议(SOAP)SOAP是Simple Object Access Protocol的缩写,是一种基于XML的不依赖传输协议的表示层协议,用来在分散或分布式的应用程序之间方便地以对象的形式交换数据。
在SOAP的下层,可以是HTTP/HTTP,也可以是SMTP/POP3,还可以是为一些应用而专门设计的特殊的通信协议。
SOAP包括三个主要部分:² SOAP封装结构:定义了一个整体框架,以表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
XFire完整入门教程网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。
先来看看我们的Interface。
1package test;23import java.util.List;45public interface IHelloService {6public String sayHello(String ttt);78public Course choose(User u);910public List test(List t);11}这其中包含了简单对象的传递,对象的传递,List的传递。
具体的开发步骤如下:1、定义Web Service的接口,代码见上面的接口定义。
2、实现接口和业务逻辑,代码如下:1package test;23import java.util.ArrayList;4import java.util.List;56public class HelloServiceImpl implements IHelloService { 78public String sayHello(String ttt) {9return "Hello, "+ttt;10 }1112public Course choose(User u){13 System.out.println(u.getName());14 Course c=new Course();15 c.setName("Eee");16return c;1718 }1920public List test(List t){21for (int i = 0; i < t.size(); i++) {22 System.out.println((String) t.get(i));23 }24 List al=new ArrayList();25 Course c=new Course();26 c.setName("EeeDDDDDD");27 al.add(c);28return al;2930 }31}用到的User和Course两个类的代码如下:1package test;23public class User {4private String name;56public String getName() {7return name;8 }910public void setName(String name) { = name;12 }13}141package test;23public class Course {4private String name;56public String getName() {7return name;8 }910public void setName(String name) { = name;12 }1314}3、编写XFire要求的WebSevice定义描述文件,如下:1<?xml version="1.0" encoding="UTF-8"?>2<beans xmlns="/config/1.0">34<service>5<name>HelloService</name>6<namespace>http://test/HelloService</namespace>7<serviceClass>test.IHelloService</serviceClass>8<implementationClass>test.HelloServiceImpl</implementationClass>9</service>1011</beans>此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。
XFire 入门轻松将 POJO 发布成 Web 服务Java 社区一直试图将 POJO 的作用发挥到极致,降低 Java 应用实现的难度,最近的尝试是将 EJB3.0 建立在 POJO 之上;另一方面,SOA 是目前 Java 社区炙手可热的名词,非常多的企业都在努力应用和实施 SOA;XFire 为这两方面的需求提供了一种魔术般的解决方式,我们很快能够发现使用 XFire 创建和发布Web 服务可以直接基于 POJO,将烦人的继承关系和一大堆其他可能的约束丢在一边。
POJO、SOA 概述被重新审视的 POJOPOJO(Plain Old Java Object,简单 Java 对象)是 Java 社区中最早的成员(回想您学习 Java 时第一个兴奋的时刻,那个简单的 "Hello World!" 例子),也是最简单、最容易实现的方式。
然而现实中 Java 的发展已经远远超越了 POJO 的范围,成为面向对象技术应用中最成功的编程语言,尤其是继承、多态的应用为我们造就了一大批开发框架(如 Struts)和标准(如 EJB),随之而来的就是实现的复杂化,我们必须面对一大堆继承关系的限制。
比如说:要开发一个基于 Struts 的应用,我们必须了解 Struts 特定的继承关系如 ActionForm、ValidateActionForm;要开发一个 EJB 应用,我们必须继承 EJBObject、SessionEJB 等。
为了抛开这些限制,降低 Java 应用实现的难度,Java 社区开始重新审视 POJO 的价值,试图将 POJO 的作用发挥到极致,最新的努力是 EJB3.0。
Java 社区将EJB3.0 设计为基于 POJO,而不是为他准备更多的继承关系等限制。
让人爱恨交加的 SOASOA 已经成为了目前 Java 社区中炙手可热的名词,几乎所有的软件厂商都在讨论它,为他提供解决方案和产品支持,大部分的企业也已经在企业内部实施或者正在考虑实施 SOA。
使用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无缝集成。
Web Service实践之——开始XFire一、Axis与XFire的比较XFire是与Axis2 并列的新一代WebService平台。
之所以并称为新一代,因为它:1、支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security等;2、使用Stax解释XML,性能有了质的提高。
XFire采用Woodstox 作Stax实现;3、容易上手,可以方便快速地从pojo发布服务;4、Spring的结合;5、灵活的Binding机制,包括默认的Acegis,xmlbeans,jaxb2,castor。
XFire与Axis1性能的比较1、XFire比Axis1.3快2-6倍2、XFire的响应时间是Axis1.3的1/2到1/5XFire与Axis2的比较虽然XFire与Axis2都是新一代的WebService平台,但是Axis2的开发者太急于推出1.0版本,所以1.0还不是一个稳定的版本,它的开发者宣称1.1版本即将推出,希望1.1版本会是个稳定的版本。
在XFire捐献给apache后有人认为Axis2将会灭亡。
其实在很多人眼里,Axis2并不是pojo形式,现在也好象XFire 比Axis更有市场,也有很多人开始从Axis转向XFire。
据说,XFire确实比Axis2简单很多AXIS VS CXF在SOA领域,我们认为Web Service是SOA体系的构建单元(building block)。
对于作过WebService的开发人员来说,AXIS和CXF一定都不会陌生。
这两个产品都是Apache孵化器下面的Web Service开源开发工具。
Axis2的最新版本是1.3,CXF现在已经到了2.0版本。
这两个框架都是从已有的开源项目发展起来的。
Axis2是从Axis1.x系列发展而来。
CXF则是XFire和Celtix 项目的结合产品。
Axis2是从底层全部重新实现,使用了新的扩展性更好模块架构。
基于XFire的WebService讲解基于XFire的WebService目录1.前言 (3)1.1.概述 (3)1.2.名词解释 (3)2.技术讲解 (3)2.1.服务端 (3)2.1.1.搭建服务端 (3)2.1.1.1.增加jar包 (3)2.1.1.2.修改web.xml (4)2.1.1.3.增加Xfire的services.xml (4)2.1.1.4.访问测试 (5)2.2.客户端 (6)2.2.1.生成调用服务类 (6)2.2.2.调用服务 (7)2.3.消息的截获 (7)2.4.使用工具软件调用WebService (7)1.前言1.1.概述本文讲解的是使用XFire的技术搭建WebService以及调用WebService的服务。
1.2.名词解释WebService:WebService 是一种web应用程序分支,它们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
WebService可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他WebService应用程序可以发现并调用它部署的服务。
WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准。
WSDL:Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web 服务通信的XML语言。
WSDL是WebService的描述语言,用于描述WebService的服务,接口绑定等,为用户提供详细的接口说明书。
XFire:XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。
Xfire指南1. 概述XFire是全球众多牛人在与axis系列对比后一致投票的选择。
我比较欣赏的特性有:1.与Spring整合,无须生成一堆文件,无须打包独立war,直接将应用中的Pojo导出为Web服务。
2.Aegis--超简约的默认Java XML 绑定机制,且可以Plugin其他绑定机制。
3.JSR181--annotatiton驱动的POJO WebService配置。
4.基于Stax的高性能框架。
5.脱离Web服务器的单元测试能力。
网上的文档与例子总是不新,请大家抛开所有的文档,所有的Axis 习惯,单看这份代表XFire1.2.2最简约做法的指南。
2. 生火指南2.1 修改web.xml,在Web应用中增加XFire的入口注意XFire有了自己的Servlet,不再依赖Spring MVC的DispatchServlet,也就远离了大家不熟悉的Spring MVC URL Mapping,与Spring达致完美的整合。
这里指定了路径为/service/* ,即WebService的URL会被默认生成为/yyy/service/BookServiceservice/ServiceName ,其中ServiceName默认为下文中的接口名。
xml 代码1.<servlet>2. <servlet-name>xfireservlet-name>3. <servlet-class>org.codehaus.xfire.spring.XFireSpringServletservlet-class>4. servlet>5. <servlet-mapping>6. <servlet-name>xfireservlet-name>7. <url-pattern>/service/*url-pattern>8. servlet-mapping>如果应用使用了Hibernate,使用了OpenSessionInView Filter,注意配置OSIV Filter Filter覆盖xfire servlet的路径,即本例中的/service/*.2.2 编写窄接口,抽取POJO中要导出的服务从已有的BookManager.java中,抽取出一个窄接口,仅暴露需要导出为Web Service的方法。
信步漫谈之Xfire—基础介绍XFire 是与 Axis 2 并列的新⼀代 Web Service 框架,通过提供简单的 API ⽀持 Web Service 各项标准协议,能够快速地开发 Web Service 应⽤。
和其他 Web 服务引擎相⽐,XFire 的配置⾮常简单,可以⾮常容易地和 Spring 集成。
以下以⼀个实例讲解如何编写⼀个 Xfire 的服务端与客户端:xfire版本:xfire-distribution-1.2.6.zip⽬录结构:关键代码:User.javaIHelloService.javaHelloService.javaClientTest.javaservices.xmlweb.xml导⼊ jar 包:将 xfire-all-1.2.6.jar 以及 lib ⽬录下的 jar 包全部导⼊即可。
services.xml ⽂件默认的存放⽬录是 WEB-INF/META-INF/xfire 下或 WEB-INF/classes/META-INF/xfire 下,如果是后者,那么实际项⽬中META-INF 应放置于 src ⽬录下:这样,部署到服务器中后 META-INF ⽂件夹就会存在于 WEB-INF/classes/ ⽬录下。
如果要⾃⼰指定 services.xml ⽂件路径,可以将services.xml 路径配置在 web.xml ⽂件中,如下:<servlet><servlet-name>XFireServlet</servlet-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class><!--The servlet will by default look for the configuration onthe classpath in "META-INF/xfire/services.xml". You canoverride it with this parameter. Seperate multiple configuration files with a comma.--><!-- 默认会在classpath的META-INF/xfire/下查找services.xml⽂件,可以覆盖这个参数,指定多个配置⽂件--><init-param><param-name>config</param-name><param-value>xfire-services.xml</param-value></init-param></servlet>插⼊⼀段 init-param 配置,param-name 为 config,指定 services.xml ⽂件的路径以及⽂件名。
Axis2,CXF,xifire1. Axis2.x (3)1.1. 开发准备工作 (3)1.1.1. 环境 (3)1.1.2. 单独启动AXIS2服务 (4)1.1.3. 将axis2-1.6.2-bin.zip中的项目打成axis2.war包 (4)1.1.4. Axis2脚本 (5)1.1.5. 安装eclipse插件(可选) (7)1.1.6. axis2-bin文件目录结构 (8)1.1.7. 部署axis2.war到tomcat (8)1.1.8. 上传services(Uploading Services) (9)1.2. Axis2开发部署 (9)1.2.1. 编写服务器代码,和配置文件 (10)1.2.2. 发布 (11)1.2.3. 通过class文件生成wsdl文件(java2wsdl) (13)1.2.4. 通过wsdl文件生成Java访问代码(wsdl2java) (13)1.2.5. 调用:Axis2开发WebService客户端的3种方式 (14)1.2.6. PS:配置文件介绍 (21)1.3. 大病系统ESB接口开发 (25)1.3.1. esb接口标准 (26)1.3.2. esb接口开发 (31)1.3.3. esb接口调试测试 (53)1.3.4. esb接口发布 (53)2. CXF (53)2.1. 准备工作 (54)2.2. 开发示例 (54)2.2.1. 编写服务端接口 (55)2.2.2. 编写服务实现 (56)2.2.3. 编写webServiceApp.java类来暴露web服务 (57)2.2.4. 启动服务 (57)2.2.5. 编写客户端访问服务 (57)2.2.6. 测试 (58)2.2.7. 集成到spring (58)2.2.8. 通过wsdl文件生成客户端和服务器端代码 (61)3. xfire (62)3.1. 准备工作 (62)3.2. 开发步骤 (62)3.2.1. 建立目录结构 (62)3.2.2. 添加依赖包 (63)3.2.3. 编写服务端代码 (63)3.2.4. 配置web.xml (66)3.2.5. 创建xfire配置文件 (67)3.2.6. services.xml的作用 (68)3.2.7. 在服务器上运行服务 (69)4. Axis与XFire的比较 (72)4.1. XFire与Axis1性能的比较 (72)4.2. XFire与Axis2的比较 (72)5. cxf与axis2比较 (73)6. WSDL文件 (74)6.1. 抽象定义 (74)6.2. 具体定义 (74)7. JAXB (76)7.1. Java SE中的JAXB (76)7.2. 使用 (77)7.3. 缺省的数据类型绑定 (77)7.4. 代码示例 (78)1.Axis2.xWeb Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构)。
XFire完整入门教程本Blog所有内容不得随意转载,版权属于作者所有。
如需转载请与作者联系(fastzch@)。
未经许可的转载,本人保留一切法律权益。
一直以来,发现有某些人完全不尊重我的劳动成果,随意转载,提醒一下那些人小心哪天惹上官司。
网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。
先来看看我们的Interface。
1package test;23import java.util.List;45public interface IHelloService {6public String sayHello(String ttt);78public Course choose(User u);910public List test(List t);11}这其中包含了简单对象的传递,对象的传递,List的传递。
具体的开发步骤如下:1、定义Web Service的接口,代码见上面的接口定义。
2、实现接口和业务逻辑,代码如下:1package test;23import java.util.ArrayList;4import java.util.List;56public class HelloServiceImpl implements IHelloService {78public String sayHello(String ttt) {9return "Hello, "+ttt;10 }1112public Course choose(User u){13 System.out.println(u.getName());14 Course c=new Course();15 c.setName("Eee");16return c;1718 }1920public List test(List t){21for (int i = 0; i < t.size(); i++) {22 System.out.println((String) t.get(i));23 }24 List al=new ArrayList();25 Course c=new Course();26 c.setName("EeeDDDDDD");27 al.add(c);28return al;2930 }31}用到的User和Course两个类的代码如下:1package test;23public class User {4private String name;56public String getName() {7return name;8 }910public void setName(String name) { = name;12 }13}141package test;23public class Course {4private String name;56public String getName() {7return name;8 }910public void setName(String name) { = name;12 }1314}3、编写XFire要求的WebSevice定义描述文件,如下:1<?xml version="1.0" encoding="UTF-8"?>2<beans xmlns="/config/1.0">34<service>5<name>HelloService</name>6<namespace>http://test/HelloService</namespace>7<serviceClass>test.IHelloService</serviceClass>8<implementationClass>test.HelloServiceImpl</implementationClass>9</service>1011</beans>此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。
4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:1<?xml version="1.0" encoding="UTF-8"?>2<mappings>3<mapping>4<method name="test">5<parameter index="0" componentType="ng.String"/>6<return-type componentType="test.Course"/>7</method>8</mapping>9</mappings>请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
5、在Web.xml中配置XFire需要用到的Servlet,代码如下:1<?xml version="1.0" encoding="UTF-8"?>2<web-app version="2.4" xmlns="/xml/ns/j2ee"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/xml/ns/j2ee5 /xml/ns/j2ee/web-app_2_4.xsd">67<servlet>8<servlet-name>XFireServlet</servlet-name>9<servlet-class>10 org.codehaus.xfire.transport.http.XFireConfigurableServlet 11</servlet-class>12</servlet>1314<servlet-mapping>15<servlet-name>XFireServlet</servlet-name>16<url-pattern>/servlet/XFireServlet/*</url-pattern>17</servlet-mapping>1819<servlet-mapping>20<servlet-name>XFireServlet</servlet-name>21<url-pattern>/services/*</url-pattern>22</servlet-mapping>232425<welcome-file-list>26<welcome-file>index.jsp</welcome-file>27</welcome-file-list>28</web-app>此时Web Service的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:1package test;23import .MalformedURLException;4import java.util.ArrayList;5import java.util.List;67import org.codehaus.xfire.XFireFactory;8import org.codehaus.xfire.client.XFireProxyFactory;9import org.codehaus.xfire.service.Service;10import org.codehaus.xfire.service.binding.ObjectServiceFactory;1112public class Client {1314public static void main(String[] args) {1516 Service srvcModel = new ObjectServiceFactory()17 .create(IHelloService.class);18 XFireProxyFactory factory = new XFireProxyFactory(XFireFactory19 .newInstance().getXFire());2021 String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloS ervice";22try {23 IHelloService srvc = (IHelloService) factory.create(srvcModel,24 helloWorldURL);25 System.out.println(srvc.sayHello("Robin"));2627 User u=new User();28 u.setName("RRRRR");29 Course c=srvc.choose(u);30 System.out.println(c.getName());3132 List al=new ArrayList();33 al.add("1212");34 al.add("2222");35 List t=srvc.test(al);36for (int i = 0; i < t.size(); i++) {37 Course co=(Course)t.get(i);38 System.out.println(co.getName());39 }404142 } catch (MalformedURLException e) {43 e.printStackTrace();44 }4546 }4748}49以上代码均无注释,因为都非常简单,呵呵。