XFire客户端流程分析
xfire使用
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>。
XFire完整入门教程
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开发webservice服务和客户端全攻略
使用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无缝集成。
cxf框架的使用流程
CXF框架的使用流程1. 什么是CXF框架?Apache CXF(前身是Xfire)是一个开源的Web服务框架,用于构建和开发服务导向架构(SOA)应用程序。
CXF提供了一种简单而强大的方式来创建、部署和管理Web服务,支持SOAP、REST、XML和JSON等多种协议。
它基于Java标准,可以与Java EE和Spring框架无缝集成,是一个功能丰富且灵活的框架。
2. CXF框架使用流程使用CXF框架开发Web服务通常有以下几个步骤:步骤一:创建Web服务的接口首先,需要定义Web服务的接口。
在接口中定义服务的方法,参数和返回值类型。
接口可以按照业务需求进行设计,并使用注解来标记服务方法。
步骤二:实现服务接口接下来,需要实现定义的接口。
在实现类中编写具体的服务逻辑代码。
可以根据业务需求调用其他服务或持久化数据。
步骤三:发布Web服务使用CXF框架提供的工具类将服务发布为Web服务。
可以通过Spring配置文件或Java代码的方式来发布服务。
步骤四:客户端调用服务编写客户端代码来调用已发布的Web服务。
可以使用CXF框架提供的工具类生成客户端代码,也可以手动编写客户端调用代码。
步骤五:部署和运行将服务端和客户端的代码部署到相应的容器或服务器上。
可以使用Maven等构建工具打包项目,并将生成的war或jar文件部署到Tomcat或其他容器中运行。
3. CXF框架使用示例下面是一个使用CXF框架开发Web服务的简单示例:步骤一:定义服务接口package com.example.service; import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface HelloWorldService { @WebMethodString sayHello(String name);}步骤二:实现服务接口```java package com.example.service;import javax.jws.WebService;@WebService(endpointInterface =。
Xfire WebService服务器端配置详解
Xfire WebService服务器端配置详解Xfire简介XFire是codehaus推出的下一代的java SOAP框架,通过提供简单的API和支持标准协议,你可以方便的开发面向服务的程序。
内建在STAX基于流的XML解析引擎的基础上,XFire拥有很高的性能。
相对Axis来说,目前它的人气指数相当的高,加上和Spring集成,在目前的j ava webservices开源社区非常的受欢迎,也被多个开源项目所集成。
这里我们用xfire来做webservice开发。
准备工作1、到网址/Download下载xfire的工具包(xfire-all-1.0.jar),最新的版本为1.2.6。
2、查看下解压缩后的目录中的docs和examples中的内容,加以粗略了解。
开发步骤1、配置XFire运行环境:新建一个Web 工程,命名为xfire,然后在web.xml文件中添加xfire配置Xml代码1.<?xml version="1.0"encoding="GB2312">2.<!DOCTYPE web-app3. PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"4. "/dtd/web-app_2_3.dtd">5.6.<web-app>7.8.<servlet>9.<servlet-name>XFireServlet</servlet-name>10. <display-name>XFire Servlet</display-name>11. <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>12. </servlet>13.14. <servlet-mapping>15. <servlet-name>XFireServlet</servlet-name>16. <url-pattern>/servlet/XFireServlet/*</url-pattern>17. </servlet-mapping>18.19. <servlet-mapping>20. <servlet-name>XFireServlet</servlet-name>21. <url-pattern>/services/*</url-pattern>22. </servlet-mapping>23.24.</web-app>其中主要就是引入了XFireServlet,用以处理Web Service请求,并且负责提供Web Service的WSDL2.开发一个webservice,创建三个类PersonJava代码1.package com.eagle.bean;2.3.import java.io.Serializable;4.import java.util.Date;5.6.public class Person implements Serializable {7.8. private int id;9.10. private String name;11.12. private int age;13.14. private Date birthday;15.16. public int getId() {17. return id;18. }19.20. public void setId(int id) {21. this.id = id;22. }23.24. public String getName() {25. return name;26. }27.28. public void setName(String name) {29. = name;30. }31.32. public int getAge() {33. return age;34. }35.36. public void setAge(int age) {37. this.age = age;38. }39.40. public Date getBirthday() {41. return birthday;42. }43.44. public void setBirthday(Date birthday) {45. this.birthday = birthday;46. }47.48. public String toString() {49. return "id:" + id + ", name:" + name + ", age:" + age +"birthday: "50. + birthday;51. }52.}PersonService:Java代码1.package com.eagle.service;2.3.import java.util.Date;4.import java.util.List;5.6.import com.eagle.bean.Person;7.8./**9. * TODO web服务接口 date:Jan 14, 2010 time:2:29:49 PM author:wxj10. * email:jxauwxj@11. */12.public interface PersonService {13.14. /**15. * 返回一个String类型16. *17. * @param name18. * @return19. */20. public String sayHello(String name);21.22. /**23. * 返回一个int类型24. *25. * @return26. */27. public int getAge();28.29. /**30. * 返回一个Date类型31. *32. * @return33. */34. public Date getBirthday();35.36. /**37. * 返回一个自定义类型38. *39. * @return40. */41. public Person getPerson();42.43. /**44. * 返回一个复杂类型45. *46. * @return47. */48. public List<Person> getPersons();49.50.}PersonServiceImplJava代码1.package com.eagle.service;2.3.import java.util.ArrayList;4.import java.util.Date;5.import java.util.List;6.7.import com.eagle.bean.Person;8.9./**10. * TODO web服务接口实现类 date:Jan 14, 2010 time:2:29:49 PM author:wxj11. * email:jxauwxj@12. */13.public class PersonServiceImpl implements PersonService {14.15. public int getAge() {16. return (int) (Math.random() * 100);17. }18.19. public Date getBirthday() {20. return new Date();21. }22.23. public Person getPerson() {24. Person person = new Person();25. person.setId(1);26. person.setAge(60);27. person.setName("china");28. person.setBirthday(new Date());29. return person;30. }31.32. public List<Person> getPersons() {33. List<Person> persons = new ArrayList<Person>();34.35. Person person1 = new Person();36. person1.setId(1);37. person1.setAge(60);38. person1.setName("ls");39. person1.setBirthday(new Date());40. persons.add(person1);41.42. Person person2 = new Person();43. person2.setId(2);44. person2.setAge(50);45. person2.setName("bj");46. person2.setBirthday(new Date());47. persons.add(person2);48.49. Person person3 = new Person();50. person3.setId(3);51. person3.setAge(56);52. person3.setName("ww");53. person3.setBirthday(new Date());54. persons.add(person3);55.56. return persons;57. }58.59. public String sayHello(String name) {60. return "hello," + name + ",welcome to xfire";61. }62.63.}3.创建目录:webroot\WEB-INF\classes\META-INF\xfire4.在此目录下新建文件services.xml文件内容:Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/config/1.0">3.<service>4.<name>Person</name>5.<serviceClass>test.services.IPerson</serviceClass>6.<implementationClass>7. test.services.PersonImpl8.</implementationClass>9.</service>10.</beans>如果不适用的话则要在lib下放入xfire相关的jar包,jar包下载地址: /DownloadOK,webservice服务器端创建完成,部署到tomcat下后启动tomcat在浏览器中输入http://localhost:8080/xfire/services/person?WSDl注意:这里的localhost:8080根据自己的tomcat配置的端口号来写,xfire为创建的web工程名称,services为默认的不得更改,person是services.xml中配置name值。
基于XFire的WebService讲解
基于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与Spring集成WebService客户端的两种开发方式
X F i r e与S p r i n g集成W e b S e r v i c e客户端的两种开发方式XFire与Spring集成时WebService客户端的两种开发方式方式①、借助Spring并通过WSDL文件创建WebService客户端1package com.jadyer.client;2import java.io.IOException;3import org.codehaus.xfire.client.Client;4import org.springframework.core.io.ClassPathResource;5import org.springframework.core.io.Resource;67/**8 * 此时应该将服务方提供的WSDL文件,拷贝到src目录下,即可9 */10public class ClientUseSpringFromWSDL {11public static void main(String[] args) throws IOException, Exception {12new ClientUseSpringFromWSDL().generatedClient();13 }1415public void generatedClient() throws IOException, Exception {16// 拷贝到src目录下的对应的WSDL文件17 String wsdl = "HelloService.wsdl";18// 装载WSDL文件19 Resource resource = new ClassPathResource(wsdl);20// 根据WSDL创建客户端实例21 Client client = new Client(resource.getInputStream(), null);22// 调用特定的Web Service方法23 Object[] result = client.invoke("sayHello", new Object[]{"玄玉"});24// 输出服务端方法的返回结果25 System.out.println(result[0]);26 }27}方式②、借助Spring并通过WSDL访问地址创建WebService客户端28package com.jadyer.client;29import java.util.List;30import org.springframework.context.ApplicationContext;31import org.springframework.context.support.ClassPathXmlApplicationContext;32import com.jadyer.model.Person;33import er;34import com.jadyer.server.HelloService;3536/**37 * 此时服务方应该提供给我们两个东西:所提供的服务的接口和WSDL访问地址38 * 然后我们自己再在src目录下创建一个client.xml文件,用于被客户端调用39 */40public class ClientUserSpringFromXML {41public static void main(String[] args) {42new ClientUserSpringFromXML().generatedClient();43 }4445public void generatedClient() {46 ApplicationContext ctx = new ClassPathXmlApplicationContext("client.xml");47 HelloService helloService = (HelloService) ctx.getBean("XFireServerDemo");4849//测试sayHello()方法50 System.out.println(helloService.sayHello("玄玉"));5152//测试getPerson()方法53 User uu = new User();54 uu.setName("杨过");55 Person pp = helloService.getPerson(uu);56 System.out.println(pp.getName());5758//测试getPersonList()方法59 List<Person> personList = helloService.getPersonList(24, "万人往");60for(Person p : personList){61 System.out.println(p.getName());62 }63 }64}接下来是用到的client.xml文件65<?xml version="1.0"encoding="UTF-8"?>66<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/dtd/spring-beans.dtd">67<beans>68<bean id="XFireServerDemo"class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean"> 69<property name="serviceClass">70<value>com.jadyer.server.HelloService</value>71</property>72<property name="wsdlDocumentUrl">73<value>http://127.0.0.1:8080/XFire_Spring_03/services/HelloService?wsdl</value>74</property>75</bean>76</beans>77<!--78这是一个用于被客户端调用的Spring配置文件,这里定义了一个XFireServerDemo的bean79该bean访问wsdlDocumentUrl为http://127.0.0.1:8080/XFire_Spring_02/XFireServer.ws?wsdl的WSDL 80-->最后是服务方提供的接口以及接口所用到的VO类81package com.jadyer.server;82import java.util.List;83import com.jadyer.model.Person;84import er;8586/**87 * 暴露成web服务的接口类88 */89public interface HelloService {90public String sayHello(String name); //简单对象的传递91public Person getPerson(User u); //对象的传递92public List<Person> getPersonList(Integer age, String name); //List的传递93}949596package com.jadyer.model;97/**98 * 接口用到的VO类99 */100public class User {101private String name;102/*--getter和setter略--*/103}104105106package com.jadyer.model;107/**108 * 接口用到的VO类109 */110public class Person {111private Integer age;112private String name;113/*--getter和setter略--*/114}。
Xfire指南
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—基础介绍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 ⽂件的路径以及⽂件名。
SSH+XFire+WebService服务端和客户端
SSH+XFire+WebService服务端和客户端1.开发环境MyEclipse2.创建项目: new Web Service Project选择XFire ,J2EE specification 选择Java EE 5.0,选择Next点击next点击Finish创建项目成功!Web.xml自动配置3.配置ssh环境(1)Struts选中项目,点击MyEclipse—>Project Capabalities Add Struts Capabalities根据自己的struts包版本选择相关的,下面的com.yourcompany.struts和com.yourcompany.struts.ApplicationResources删除就行我用的struts2,选择struts2.1,点击下一步Next点击Finish完成了Struts的配置。
此时web.xml中自动配置(2)Hibernate配置选中项目,点击MyEclipse—>Project Capabalities Add Hibernate Capabalities,选择Hibernate3.1NextNext配置连接数据库的信息。
配置好完成该。
(3)Spring选中项目,点击MyEclipse—>Project Capabalities Add Spring Capabalities,选择Spring2.5一直Next到结束就OK.此时Sping环境配置完成。
4.代码Service接口实现类在service.xml中配置信息配置好之就可以在浏览器访问了http://localhost:8088/aa/services/billService?wsdl,访问结果如下5.客户端测试有两种方法:第一种是通过服务端提供的接口类进行调用。
代码如下import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service;importorg.codehaus.xfire.service.binding.ObjectServiceFactory;import com.framework.app.service.IBillOfService;public class BillManage {public static void main(String[] args) throws Exception { Service srModel = newObjectServiceFactory().create(IBillOfService.class);XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());String endPoint ="http://localhost:8088/aa/services/billService";IBillOfService service = (IBillOfService) factory.create(srModel,endPoint);String billStr = service.weightNoteList("1323XSG02", 10, 1);System.out.print("提交返回:" +billStr);}}第二种是直接通过url调用, 不用客户端提供接口类。
webService(axis2,cxf,xfire,gsoap)介绍
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 1.2.6调用Web Service的几种方法
XFire 1.2.6调用Web Service的几种方法最近由于项目的需求,我开始学习XFire 1.2.6。
XFire的服务发布很简单,但由于xfire为用户提供了多种调用(invoke) web service的方法,所以在编写客户端代码的时侯,需要我们做一番斟酌。
在不同的应用环境下,我们可能需要采用不同的服务调用的方法。
本文将详细介绍这几种调用web服务的方法。
方法一:动态客户端(Dynamic Client)这是一种最简单的web服务调用方法。
具体过程如下:1.创建一个服务代理,其中url为调用服务的wsdl地址。
Client client = new Client(new URL(url));2.调用web服务,输入参数(简单类型)。
Object[] results = client.invoke(methodName, new Object[]{param1,param2});3.打印web 服务运行结果System.out.println((ReturnValueType)results[0]);全过程只需要三个过程,非常简单。
但是,上述过程仅限于简单的方法调用,对于那些以复杂数据结构为参数的方法,以及复杂结构的返回值的方法,需要采用另外的处理方法,否则将无法正常运行。
关于复杂参数的传递以及调用复杂返回值方法的过程还有待进一步研究,如果哪个读者熟悉这一块,可以与我联系,本人将非常感谢。
方法二:代理工厂方法(Proxy Factory)一般的方法如如下:1.创建一个服务实例,就像在自己的服务器上创建一样。
要注意的是,这里的“”Service serviceModel = new ObjectServiceFactory().create(YourService.class);要注意的是,这里的“YourService”是接口类,而不是接口的实现类。
2.定义服务URLString serviceURL = “http://localhost:8080/XFireTest/services/YourService”;3.为服务创建一个代理YourService client = (YourService) new XFireProxyFactory().create(serviceModel,serviceURL);4.使用代理访问服务提供的方法String name = (String) client.getName();如果已经知道调用的服务在本地时,我们可以采取下面方法(本地传输)来调用,这种方法可以提高调用服务的速度,减少调用服务的延迟时间。
xfire根据WSDL生成客户端代码
指定WSDL文件的位置、存根代码的输出地址及对应的类包,点击Finish。
3.XFire插件将在生成客户端代码存根的同时生成服务端代码的存根,如图16-7所示。
图16-6 创建客户端代码存根 图16-7 生成的代码
安装Eclipse XFire插件
1.Help→Software Updates→Find and Install...;
2.选择“Search for new features to install”,并点击Next;
3.选择“New Remote Site...”,创建一个Name为Xfire且URL为
下面,我们利用XFire生成的BbtForumServiceClient对服务端的Web S例化一个BbtForumServiceClient,然后通过URL指定Web Service的服务地址,然后创建一个服务的窄接口实例,如①所示,接着我们就可以使用这个窄接口实例进行Web Service服务的调用了。
根据WSDL生成客户端代码
XFire允许通过运行Ant任务,根据WSDL文件生成访问Web Service的客户端代码存根,同时XFire还提供了一个Eclipse插件完成相同的任务。在本节中,我们将学习通过XFire Eclipse插件生成BbtForumService客户端存根代码的知识。
/xfire/update/的网站;
4.点击Finish安装XFire插件。
使用插件创建客户端代码存根
1.File→New→Other...→XFire→Code generation from WSDL document。
2.弹出一个对话框,如图16-6所示。
BbtForumServiceClient是BbtForumServicePortType的工厂类,它提供了若干个获取BbtForumServicePortType实例的重载方法。BbtForumServicePortType对应服务端的窄接口BbtForumService类。而BbtForumServiceImpl是服务端的存根代码,在META-INF中还有XFire的服务配置文件。对于客户端来说,一般不需要服务端的代码,所以用户可以将BbtForumServiceImpl和META-INF删除。
JAVA之WebService框架---Xfire
Java WebService框架之XFire使用说明声明:此文档只为做学习交流用,如果你有任何异议或更好的想法,欢迎你在群里讨论或者与我讨论!希望能够帮到你!WebService这个字眼,或许大家听起来,并不陌生,一般做过几年开发经验的程序员,几乎都跟它打过交道,首先,我要说明的是,WebService并不是java的特权,也就是说,并不是java只有WebService,.net有,C#有。
等等不罗嗦,首先我得让大家知道,WebService是干嘛用的,从字面意思理解就是web服务,其实,说白了,Web Services就是发布的、完成其特定需求的、在线应用服务。
其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
WebService的主要目标是跨平台的可互操作性。
他独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。
(相关详细解释,大家可以百度的文库)我举个例子,或许大家就明白了,我举个它的应用,比如说,现在有这么一个需求:WebService应用案例一:张三传递给李四某个城市的名字比如说北京,李四反馈给张三北京的天气预报为:晴,王五传递给李四的城市名字济南,李四反馈给王五济南的天气预报为:阴;赵六传递给李四武汉。
等等。
但是,无论是谁想给李四传递城市的名字,必须遵循李四开放出来的一个发送地址,要不然你找不到李四,李四也收不到你的请求城市。
那么,在该示例中,无非就是想实现的一个功能就是,任何人传递给李四一个城市的相关名字,李四反馈给请求者该城市的天气情况,前提是,按照李四公布给大家的发送地址,那么,所有向李四发送请求城市的人,都会收到李四反馈的请求的城市的天气情况,那么这就是一个典型的webservice的调用,它与平台无关,跟每一个系统都无关,是独立的在线服务,那么,在此例中,每一个向李四发送请求的人,都是客户端,而李四所实现的接受城市,反馈回天气预报的功能,就是webservice的服务断,而李四提供的发送地址,就是大名鼎鼎的访问Webservice得到WSDL地址再给大家举一个例子:WebService应用案例二:有两套系统,A系统为用。
用XFire开发 WebService全教程
XFire开发WebServiceXFire简介:XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。
和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring 集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率. 详细内容请看:/view/920041.htmlWebService简介:它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web .应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
具体内容请访问:/view/837392.html开发环境:JDK 1.6;MyEclipse8.5;tomcat 6.0;Windows XP;XFire1.2接下来我们看怎么用XFire来构建一个webservice服务端。
1.创建工程打开MyEclipse 8.5,新建一个WebService工程。
如下图Webservice服务端名称Webservice服务路径什么都不用改动services.xml2.创建webserice服务.MyServiceTestImpl.java代码如下:Service.xml配置文件如下:3.测试服务端测试服务器我们采用Tomcat, 需要将做好的服务端打包部署到tomcat上,然后启动. 在进行测试.可以看到,我们服务端提供了一个名叫“sayHello”的接口.我们点击这个方法名.在下面填入字符串. 点击GO如下这样服务端就返回一个字符串. 说明我们服务端测试通过.4.创建客户端代码创建客户端可以用MyEcilse自带的创建客户端方式.去创建. 比较简单. 傻瓜式操作.这里我就不在示范. 我采用手写的方式写一个客户端.这样有助于大家理解.也能加深记忆.(1)创建一个工程. MyserviceCilent 添加XFire架包. 工程架构如下.(2)创建接口实现类.IMyServiceTest.java. 源码如下:package service.client;//Generated by MyEclipsepublic interface IMyServiceTest {public String sayHello(String user);}MyServiceTestImpl.java 源码如下:package service.client;//Generated by MyEclipsepublic class MyServiceTestImpl implements IMyServiceTest { public String sayHello(String user) {return"您好,"+user;}}(3)写测试类.ClientTest.java 源码如下:public static void main(String [] args){Service serviceModel = newObjectServiceFactory().create(IMyServiceTest.class);XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire); String serviceUrl ="http://10.222.22.97:8080/MyServiceTest/services/MyServiceTest";IMyServiceTest client = null;try {client = (IMyServiceTest) factory.create(serviceModel, serviceUrl);} catch (MalformedURLException e) {System.out.println("Client call webservice has exception: "+ e.toString());}String result1 =client.sayHello("张三");System.out.print(result1);}直接执行后会返回以下结果.5.现在一个简单的webservice已经开发完成. 当然有的同学会提出. 只可以传递字符串类型吗?当然不是. 后续我还为大家在写传递对象类型. 集合类型. 数组类型. 敬请期待.谢谢!有什么问题,可以联系我. 邮箱:zhubox1j7253@很高兴能和你探讨.。
webservice(Xfire的使用)
WebService1、WebService有什么用,使用它有什么好处及它的原理是怎样的Web Service主要为了使原来各个孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议simple object access protocal)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个基于XML的通讯协议用于分散和分布式环境下网络信息交换。
在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。
它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
2、Webservice移植性是不同系统(不同语言开发的系统、相同语言但属于不同应用开发的系统)之间互操作的平台,他提供一种标准,不同平台和不同语言之间进行互操作(异构系统之间互连互通)的标准它与语言和平台无关(无关性),有的时候无关性比性能更重要,意味着更通用也可以认为webservice就是一种应用程序,不同的系统通过它可以是实现互操作如果其它系统要访问发布在web服务器上java Web系统中某个类中的方法,这个时候只需要给该类封装成一个WebService Api接口3、如果一个webservice创建好了之后就可以访问了通过Soap(simple object access protocol)协议,实际使用了xml来描述和封装request和response,使得他们(request和response)可以通过soap协议进行传递.soap协议中提供了标准的远程过程调用RPC(方法)来访问webservice,rpc使用xml和xsd(xml schema Definition是DTD的替代品)来描述被请求的方法以及该方法的参数情况和返回情况{ 即用xml和xsd来描述和封装request和response,使得他们(request和response)可以通过soap协议进行传递}4、为什么其它系统都可以访问webservicewebservice使用xml和xsd来描述内部一些配置,xml和xsd是webservice基本数据格式wsdl(webservice description language),它使用的全是xml和xsd。
cxf_axis_xfire客户端调用的几种方法
CXF、AXIS2、XFire客户端的几种调用方法一、CXF客户端
服务接口类
服务实现类
客户端实现类(JaxWsDynamicClientFactory)
客户端实现类(wsdl2java生成客户端存根类)
import java.util.ArrayList;
客户端实现类(用JAX-WS APIs开发动态客户端)
二、AXIS2客户端
这里我们不写AXIS2的服务端,直接使用上面的CXF的服务端。
客户端实现类(RPCServiceClient)
客户端实现类(用AXIS2 AXIOM[AXis Object Model])
客户端实现类(AXIS2 ADB[Axis Data Binding])
三、XFire客户端
由于XFire客户端方法调用与CXF和Axis2客户端方法调用生成的SAOP包不一样,所以XFire调不了CXF服务,这里我们用XFire实现和CXF相同的TestService服务(由于我们关注的是客户端调用,服务端就在这省略)。
客户端实现类:。
Java使用XFire调用WebService接口
Java使用XFire调用WebService接口看了一些Java调用WebService接口的例子,很多都是Ctrl+C,Ctrl+V的,其中有很多拿来使用后发现有错误,令人郁闷,特此写了一篇经过测试的,只是一个小例子。
服务端(为客户端提供Webservice接口):使用工具:myeclipse-8.6.1-win32,开发步骤:1.创建工程File->New->Web Service Project,弹出Web Service Project窗口,需要填写Project Name(例子是Demo),选择XFire,然后一路next,直到完成。
创建完成后,打开生成的文件,可以看到,XFire已经配置好了。
1<?xml version="" encoding="UTF-8"?>2<web-app xmlns=" " xmlns:xsi=" :001/XMLSchema-instance" version="" xsi:schemaLocation="">3<servlet>4<servlet-name>XFireServlet</servlet-name>5<servlet-class> .XFireConfigurableServlet</servlet-class>6<load-on-startup>0</load-on-startup>7</servlet>8<servlet-mapping>9<servlet-name>XFireServlet</servlet-name>10<url-pattern>/services/*</url-pattern>11</servlet-mapping>12<welcome-file-list>13<welcome-file></welcome-file>14</welcome-file-list>15</web-app>2.创建WebService服务选择Toolbars上的New Web Service,弹出New Web Service窗口,选择Strategy:Create web service from Java class(Bottom-up scenario)并勾选下面的Create new Java bean,然后Next>,在Web service name中填写MyService,在Java package栏点击New...弹出窗口中Name:中填然后点Finish。
MiXFire服务部署手册
MiXFire服务部署手册XFire服务部署手册2008-05-15 11:36 阅读22 评论0字号:小一、准备工作:工程目录结构工程的目录结构如下图所示:ldaxfire是工程的根目录。
/WEB-INF/classes/META-INF/xfire目录用于存放service.xml文件。
将下的包(用到的)copy到/WEB-INF/lib目录下。
<servlet-name>XFireServlet</servlet-name><display-name>XFire Servlet</display-name><servlet-class></servlet-class><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>这样在工程中公布的所有服务都能够在工程URL的services子目录下访问。
三、类结构调整XFire关于要公布的服务没有多余的要求,它能够自动的将指定服务类的公共方法公布出去。
但是POJOs 的调用要求传入的参数类型务必是接口;同时由于XFire生成的桩使用了不支持的JSR181注释类型,因此在这里最好是遵从POJOs的要求,为每一个要公布的服务类生成一个接口,以便于低版本的客户端使用POJOs方式进行访问。
四、类型影射XFire支持的数据类型包含基础类型、数组、集合、字符串、Date(java.util.Date、java.util.Calendar、ja va.sql.Timestamp、java.sql.Date、java.sql.Time)、XML类型(Document、Element、XMLStreamReader、Source)及以上类型构成的复合类型。
MiXFire服务部署手册
MiXFire服务部署手册一、预备工作:工程名目结构工程的名目结构如下图所示:ldaxfire是工程的根名目。
/WEB-INF/classes/META-INF/xfire名目用于存放service.xml文件。
将下的包(用到的)copy到/WEB-INF/lib名目下。
<servlet-name>XFireServlet</servlet-name><display-name>XFire Servlet</display-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>如此在工程中公布的所有服务都能够在工程URL的services子名目下访咨询。
三、类结构调整XFire关于要公布的服务没有余外的要求,它能够自动的将指定服务类的公共方法公布出去。
然而POJOs的调用要求传入的参数类型必须是接口;同时由于XFire生成的桩使用了不支持的JSR181注释类型,因此在那个地点最好是遵从POJOs的要求,为每一个要公布的服务类生成一个接口,以便于低版本的客户端使用POJOs方式进行访咨询。
四、类型影射XFire支持的数据类型包括基础类型、数组、集合、字符串、Date(ja va.util.Date、java.util.Calendar、java.sql.Timestamp、java.sql.Date、java.sql. Time)、XML类型(Document、Element、XMLStreamReader、Source)及以上类型组成的复合类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XFire客户端流程分析
分类:Webservice 2008-06-13 14:21 341人阅读评论(0) 收藏举报
XFire是当前J2EE领域非常流行的Web Service框架,以其卓越的性能和简单易用的特性博得了广大开发者的青睐。
目前XFire已经演变为Apache的CXF 项目,但仍有大量用户在使用XFire。
下面是XFire客户端调用的流程分析图,本文后续本分将围绕该图展开。
XFire客户端的调用非常灵活,可以有很多种方式,如通过配置调用、通过API编程调用或者与Spring等IoC框架集成使用。
虽然调用方式灵活多样,但万变不离其中,其内部流程是一致的。
创建服务模型
服务模型是XFire中非常重要的概念之一,包含了服务的接口信息、操作信息、Binding信息等诸多服务调用过程中需要的信息。
因此在进行服务调用之前首先要创建服务模型。
创建服务模型的工作是由服务工厂ServiceFactory完成的,用户需要为服务工程提供服务接口、名称、命名空间等一些信息,其中服务接口是必须的,其他为可选信息。
创建Client实例
Client是XFire客户端的核心组成部分,间接的代表了一个服务。
当为具体某个服务配置拦截器(Handler,有很多种译法如拦截器、处理器、过滤器等,本文统一用拦截器)时,其实是将拦截器信息应用到Client实例上。
Client可以手工创建也可以由XFireProxyFactory创建,无论通过哪种方式,Client在初始化过程中最重要的一步都是在out拦截器堆栈中增加一个OutMessageSender拦截器。
该拦截器负责最终将服务调用通过HTTP发送到服务提供者并返回处理结果。
本文后续部分还会对OutMessageSender做更加详细的讲解。
创建服务代理对象
XFireProxy,XFire SOAP客户端代理实现,用户调用服务时(如
Hello.echo(“tony”))就是通过该对象的invoke方法来执行。
实际上,XFireProxy只是将调用代理到Client实例,最终执行服务的还是Client实例。
构造调用链信息
Client实例的invoke方法在执行时,生成了一个Invocation对象,该对象构造了一次完整的调用信息,包括OutMessage、MessageContext等。
同时Invocation还负责构造一个拦截器管道(HandlerPipeline),该管道包含了本次调用需要执行的所有拦截器,当然也包括OutMessageSender。
这些拦截器会
分不同的阶段来执行,这也是XFire一个特性。
XFire默认定义了很多阶段(Phase),每个阶段都会有若干拦截器被调用。
循环调用拦截器
拦截器(Handler)是XFire中最为重要的概念,一次服务调用就是由若干拦截器组合完成的。
XFire默认提供了很多预定义的拦截器,用户也可以定义自己的拦截器。
基本上,通过拦截器可以影响XFire执行过程中的任何步骤,你可以为所欲为:)
拦截器有两个重要的概念,一个是阶段(Phase),一个是顺序(Order)。
这两个因素共同决定了拦截器的执行顺序。
可以在三个不同的地方配置拦截器:
⏹XFire实例:全局拦截器,对所有通道上的所有服务起作用
⏹Transport:通道特定的拦截器,只对该通道(如HTTP、JMS)起作
用
⏹具体服务:服务特定的拦截器,只对该服务起作用
其实,具体服务上的拦截器最终是配置到Client上。
对于同一个阶段上的拦截器,执行顺序为“具体服务—>Transport—>XFire实例”。
千万不要忽视这些顺序,这对你正确的使用拦截器非常有帮助。
发送远程服务请求
这是整个调用链中最后的一环,也是最关键的一步。
OutMessageHandler,前文已经有所提及,是一个特殊的拦截器,在Client初始化时创建并加入调用链中。
该拦截器处于拦截器调用链的Phase.SEND阶段,基本上也是最后的阶段。
OutMessageHandler从当前调用的消息上下文(MessageContext)中获取请求的服务地址URI以及SOAP消息,然后通过HTTP将SOAP请求发送到远程服务器(针对HTTP通道,如果是JMS通道则发送到指定的目的地)。
最终将远程服务器的响应逐级返回给调用者。
案例分析
前文很多地方都提到Handler非常重要,那么具体有那些应用场景呢?本部分通过两个案例逐步演示Handler的应用。
一、简单安全验证
这是一个非常典型的应用场景,假设A公司对外提供了一个旅程信息查询服务,该服务通过XFire对外发布。
但是A公司只希望其合作伙伴才能使用该服务,那么A公司可以为该服务配置一个Handler,该Handler 从SOAP的消息头中获取认证字符串,只有通过验证的请求才被执行。
下面是简单的示例代码,真实情况要比这复杂得多。
对于A公司的合作伙伴,要想调用该服务,必须在其SOAP的消息头中包含上面代码中的验证字符串,否则服务将被拒绝。
下面是简单的示例代码:
二、查找真实服务
这是一个比较特殊的应用场景:假设A公司已经初步实现SOA,拥有一个服务注册中心,所有的XFire服务都在该中心注册。
客户端在调用服务时需要动态的从该服务注册中心获取当前的服务地址及版本。
通过其他方式肯定也可以实现该需求,但是通过Handler来实现会非常的幽雅,而且对应用不需要做任何变动。
我们先来看一下Handler的代码:
正如代码所示,只需要从context中获取当前请求的服务URI地址,然后用当前请求环境信息及服务URI地址到服务注册中心查找真实的服务,并重新设置服务的地址。
结束语
本文粗略的介绍了XFire客户端的调用流程,并着重讲解了Handler 的扩展机制及其应用场景,力求读者能够通过本文对XFire能有更加深入的了解和掌握。
文中难免存在不足之处,欢迎任何形式的交流。