加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebSerice学习笔记2——XFire基础

发布时间:2020-12-16 23:05:18 所属栏目:安全 来源:网络整理
导读:1.XFire是codehaus推出的下一代的java SOAP框架,通过提供的简单的API和支持标准协议,可以方面地开发webservice程序。XFire最大的特点就是支持将POJO通过非常简单的方式发布为WebService,同时还拥有很高的性能。 2.XFire将?POJO?发布成?Web?服务的基本步骤

1.XFire是codehaus推出的下一代的java SOAP框架,通过提供的简单的API和支持标准协议,可以方面地开发webservice程序。XFire最大的特点就是支持将POJO通过非常简单的方式发布为WebService,同时还拥有很高的性能。

2.XFire将?POJO?发布成?Web?服务的基本步骤:

(1).创建?Web?服务接口,声明该?Web?服务对外暴露的接口;

(2).创建?Web?服务实现类,为?Web?服务接口提供实现;

(3).修改?XFire?框架的服务发布文件?---- services.xml,将?POJO?发布成?Web?服务。

3.简单的XFire开发过程:

(1).在web.xml中加入如下配置:

[xhtml]? view plain copy
  1. <servlet>??
  2. ???????servlet-name>XFireServlet</>??
  3. ???????servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet>??
  4. >??
  5. servlet-mappingurl-pattern>/services/*>??
?

(2).创建services.xml文件,加入如下配置:

[xhtml]?
  • <??xml?version=”1.0”?encoding=”UTF-8”??>??
  • beans>??
  • ???????service?xmlns=”http://xfire.codehaus.org/config/1.0”>??
  • ??????????????name>webservice名>??
  • ??????????????namespace>http://包名的逆序/服务类名serviceClass>提供服务的接口全路径implementationClass>服务实现类全路径scope>服务存活范围>??
  • ???????service>??
  • ???????……??
  • >??
  • ?

    4.XFire配置文件元素:

    (1).service:service?标签和它所包含的?xml?内容为发布成?Web?服务的?POJO?提供完整的描述。

    (2).name:Web?服务被发布时所采用的唯一名称。

    (3).namespace:Web?服务发布时所使用的命名空间。

    (4).serviceClass:Web?服务接口类的全名,包括包名和类名。

    (5).implemetationClass:Web?服务实现类的全名,包括包名和类名。

    5.XFire传递复杂对象:

    分两种情况:

    (1).客户端创建一个实现Remote接口的类,方法名、参数类型和返回值类型均与WebService服务相同,则传递自定义的复杂对象参数和返回值时不用特殊配置和处理。

    注意:只适用于在自定义对象中传递List、Map、数组等的复杂对象。

    (2).服务器端实现一个接口(非Remote接口),客户端通过该接口来调用WebService对象,则必须在服务器端接口同一目录下建立一个名为“服务端接口名.aegis.xml”文件,添加如下配置:

    [xhtml]? mappings>??
  • ???????mapping>??
  • ??????????????method?name=”接口中的方法名”>??
  • ?????????????????????<!--配置方法参数类型,索引从0开始-->??
  • ?????????????????????parameter?index=”0”?componentType=”参数类型全路径(如:java.lang.String)”/>??
  • ?????????????????????……??
  • ?????????????????????return-Type?componentType=”返回值类型全路径”/>??
  • ??????????????method>??
  • ??????????????……??
  • ???????>??
  • >??
  • ?

    注意:适用于Map等传递自定义对象这种情况。

    6.XFire的Handler:

    一个Handler可以看成是XFire的一个加工套件,XFire通过它们定义SOAP发送和接收之前的各种加工处理逻辑。如Handler可以对SOAP体的内容进行加工处理,或者SOAP头进行处理。

    (1).编写自定义Handler:

    继承AbstractHandler类。

    (2).服务器配置Handler:

    在services.xml文件中加入如下配置:

    在<scope>元素标签之下加入:

    [xhtml]? inHandlershandler?handlerClass=”自定义Handler的全路径”/>??
  • ???????……??
  • outHandlers>??
  • ?

    (3).客户端Handler的配置:

    [java]?
  • Client?client?=?Client.getInstance(客户端得到的服务对象);??
  • client.addInHandler(new?自定义Handler());??
  • client.addOutHandler(new?自定义Handler());??
  • ?

    7.文件上传处理:

    (1).将文件用DataHandler包装后传递到服务器端。

    (2).服务器端根据得到的DataHandler对象.getInputStream()得到文件输入流,将其写到服务器端。

    (3).对SOAP消息进行MTOM编码。

    [java]?
  • org.codehaus.xfire.client.Client?client?=?((XFireProxy)Proxy.getInVocationHandler(服务对象)).getClient();??
  • client.setProperty(SoapConstants.MTOM_ENABLED,?“true”);??
  • ?

    (4).对输入输出流指定UTF-8字符集:

    [java]?
  • InputStreamReader?input?=?new?InputStreamReader(handler.getInputSream(),?“UTF-8”);??
  • OutputStreamWriter?writer?output?=?new?OutputStreamWriter(new?FileOutputStream(file),0)">8”);??
  • ?

    (5).在对应的services.xml文件中,上传文件的Service必须添加如下的Property:

    [xhtml]? propertiesproperty?key=”mtom-enabled”>trueproperty>??
  • >??
  • ?

    8.XFire与Spring的集成(服务器端使用XFire导出器方式):

    (1).在web.xml中指定XFire和Spring的配置文件如下:

    [xhtml]? context-param>??
  • ???????param-name>classpath:org/codehaus/xfire/spring/xfire.xml,??
  • ????????????????????????????/WEB-INF/applicationContext.xml>??
  • ?

    (2).在Spring配置文件中导入XFire配置文件,配置要发布的服务:

    [xhtml]? import?resource=”classpath:org/codehaus/xfire/spring/xfire.xml”/>??
  • bean?id=”服务id”?parent=”baseWebService”property?name=”name”?value=”服务名”/>??
  • ???????property?name=”serviceClass”?value=”服务接口全路径”/>??
  • ???????property?name=”serviceBean”?value=”服务实现类”/>??
  • bean>??
  • ?

    (3).在Spring中配置XFire导出器:

    [xhtml]? bean?id=”?baseWebService”?class=”org.codehaus.xfire.spring.remoting.XFireExporter”?lazy-init=”false”?abstract=”true”>??
  • ???????property?name=”serviceFactory”?ref=”xfire?serviceFactory”property?name=”xfire”?ref=”xfire”>??
  • ?

    (4).客户端Spring配置:

    [xhtml]? bean?id=”客户端服务名”?class=”org.codehaus.xfire.spring.remoting.XFireClientFactoryBean”property?name=”wsdlDocument”?value=”服务的WSDL地址”>??
    ?

    在客户端就可以像使用普通java对象一样使用被spring管理起来的web服务了。

    9.XFire与Spring的集成(服务器端不使用XFire导出器方式):

    和服务器端使用XFire导出器类似,不同之处在于配置发布的服务:

    [xhtml]? bean?id=”服务id”?class=”服务名”property?name=”namespace”?value=”服务命名空间”property?name=”serviceBean”?value/ref=”服务实现类”>??
    ?

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读