1、
XFire服务布署手册
-05-15 11:36 阅读22 评论0
字号:大 中 小小
一、准备工作:工程目录结构
工程目录结构以下图所表示:
ldaxfire是工程根目录。/WEB-INF/classes/META-INF/xfire目录用于存放service.xml文件。将下包(用到)copy到/WEB-INF/lib目录下。
2、splay-name>
3、
这么在工程中公布全部服务全部能够在工程URLservices子目录下访问。
三、类结构调整
XFire对于要公布服务没有多出要求,它能够自动将指定服务类公共方法公布出去。不过POJOs调用要求传入参数类型必需是接口;同时因为XFire生成桩使用了不支持JSR181注释类型,所以在这里最好是遵从POJOs要求,为每一个要公布服务类生成一个接口,方便于低版本用户端使用POJOs方法进行访问。
四、类型影射
XFire支持数据类型包含基础类型、数组、集合、字符串、Date(java.util.Date、java.util.Calendar、jav 4、a.sql.Timestamp、java.sql.Date、java.sql.Time)、XML类型(Document、Element、XMLStreamReader、Source)及以上类型组成复合类型。
基础类型、数组、String、Date类型不用进行类型影射,除此之外数据类型如List、Map等集合对象或是其它复合类型,必需要写对应类型影射。
XFire类型影射在ServiceClassName.aegis.xml(ServiceClassName为服务类/接口名字)文件中申明。
在这里尽可能要求公布服务参数和返回值不要超出基础类型、数组、String泛围,因这类型影射在此不作具 5、体说明。
在XFire工程中service.xml必需在/WEB-INF/classes/META-INF/xfire/目录下。其基础格式以下
6、tionClass />
7、 8、
9、 10、nt url="" />
11、指定接口实现类。
5、serviceFactory:可选。ServiceFactory控制服务创建和配置。
6、bindingProvider:设置bindingProvider,提供绑定相关信息。如端口等。
7、style:可选。参数样式。默认值为wrapped。可取值为wrapped、message、document 及rpc。
8、use:可选。指定编码类型。取值能够是encoding或litaral,现在XFire支持literal格式,即无编码。
9、scope:可选。指定服务生存周期。默认值为application,即在所以访问期间只创建一个服务,不用时能够会被持久化。能 12、够是application、session或request。
invoker:可选。设置调用转接器。假如当服务实现类不是一个无格式java bean时invoker能够指定其调用方法。
excutor:可选值。能够为服务指定一个默认值以外实施策略。
handlers:能够使用inHandlers、outHandlers或faulterHandlers为服务指定输入、输出和犯错时调用处理。每个handler本身是一个XML解析处理句柄。
createDefaultBinding:可选。默认为true,即创建默认SOAP1.1 HTTP绑定。假如不想创建默认绑定,可将其值设为false。
13、
绑定配置:每一个绑定全部要指定一个transport ID。下面是对应Transport和ID对应表。使用endpoint选项能够覆盖掉默认端口地址。
JMS
urn:xfire:transport:jms
Local
urn:xfire:transport:local
14、tationClass>
com.yourcompany.yourpath.ServiceImplClass
15、换上面配置就是一个经典XFire service配置。
六、用户端调用
用户端调用采取POJOs方法。在这种方法下要用到在服务端定义服务接口。具体代码以下:
Service serviceModel = new ObjectServiceFactory().create(
XFireProxyFactory serviceFactory = new XFireProxyFactory();
ServiceInterface service = (ServiceInterface) serviceF 16、actory.create(
serviceModel, serviceURL);
Client client = Client.getInstance(service);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
data = service.serviceMethod();
注:其中ServiceInterface在实际工程中要以实际接口类型替换,servi 17、ceMethod以具体方法名替换。
在XFire1.2以后支持SOAP消息GZip压缩传输,在适宜地方开启GZip压缩能够降低网络传输数据量,加紧速度。
在XFire中开启GZip压缩要用到一个开源Filter:PJL Compressing Filter。这个Filter最新版本是1.6.4,自1.5.0开始该工程开始构建于JDK5.0,所以在JDK1.4环境下只能使用1.4.6(这个版本会和高版本同时更新)。
一、服务端开启GZip:在服务端开启GZip只需将PJL Compressing Filter下jar包(用到)导入到web/WEB-INF/lib目录下。并在web.xml文 18、件中增加以下配置:
19、 20、
代码清单7-1:服务端加入GZip时web.xml中增加配置
注:依据web.xml文法定义,这个定义必需在servlet定义之前。
二、用户端启用GZip:用户端开启GZip只要将用户端GZip属性设为true却可。代码以下:
Service serviceModel = new ObjectServiceFactory().create(
XFireProxyFactory serviceFactory = new XFireProxyFactory();
21、 ServiceInterface service = (ServiceInterface) serviceFactory.create(
serviceModel, serviceURL);
Client client = ((XFireProxy) Proxy.getInvocationHandler(service))
.getClient();
开启response压缩
client.setPrope 22、rty(CommonsHttpMessageSender.
GZIP_RESPONSE_ENABLED, Boolean.TRUE);
client.setProperty(CommonsHttpMessageSender.
GZIP_RESPONSE_ENABLED,Boolean.TRUE);
同时开启response和request压缩
client.setProperty(CommonsHttpMessageS 23、ender.GZIP_ENABLED,
Boolean.TRUE);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
data = service.serviceMethod();
注:在同时启用时,无须再分别启用response和requestGZip压缩。
注意,当服务端没有启用GZip,用户端启用请求GZip压缩时,会产生SOAP解析错误,假如服务端开启了GZip压缩功效,用户端是否启用GZip全部没有影响。






