资源描述
XFire服务布署手册
-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>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
这么在工程中公布全部服务全部能够在工程URLservices子目录下访问。
三、类结构调整
XFire对于要公布服务没有多出要求,它能够自动将指定服务类公共方法公布出去。不过POJOs调用要求传入参数类型必需是接口;同时因为XFire生成桩使用了不支持JSR181注释类型,所以在这里最好是遵从POJOs要求,为每一个要公布服务类生成一个接口,方便于低版本用户端使用POJOs方法进行访问。
四、类型影射
XFire支持数据类型包含基础类型、数组、集合、字符串、Date(java.util.Date、java.util.Calendar、java.sql.Timestamp、java.sql.Date、java.sql.Time)、XML类型(Document、Element、XMLStreamReader、Source)及以上类型组成复合类型。
基础类型、数组、String、Date类型不用进行类型影射,除此之外数据类型如List、Map等集合对象或是其它复合类型,必需要写对应类型影射。
XFire类型影射在ServiceClassName.aegis.xml(ServiceClassName为服务类/接口名字)文件中申明。
在这里尽可能要求公布服务参数和返回值不要超出基础类型、数组、String泛围,因这类型影射在此不作具体说明。
在XFire工程中service.xml必需在/WEB-INF/classes/META-INF/xfire/目录下。其基础格式以下
<inHandlers>
<handler handlerClass=""></handler>
</inHandlers>
<name />
<namespace />
<serviceClass />
<implementationClass />
<serviceFactory />
<bindingProvider />
<style>document|rpc|message|wrapped</style>
<use>literal|encoded</use>
<scope>request|session|application</scope>
<invoker />
<executor />
<inHandlers>
<handler handlerClass="" />
</inHandlers>
<outHandlers>
<handler handlerClass="" />
</outHandlers>
<faultHandlers>
<handler handlerClass="" />
</faultHandlers>
<createDefaultBindings>true|false</createDefaultBindings>
<bindings>
<soap11Binding transport=""
allowUndefinedEndpoints="">
<endpoints>
<endpoint url="" />
</endpoints>
</soap11Binding>
<soap12Binding transport=""
allowUndefinedEndpoints="">
<endpoints>
<endpoint url="" />
</endpoints>
</soap12Binding>
</bindings>
1、name:必需。ServiceRegisty就是经过这个名字进行服务注册,服务布署完成后也是用它来调用服务。
3、serviceClass:必需。要布署到服务中类,能够是接口。
4、implementationClass:可选。服务被调用时使用实现类。假如serviceClass值是一个接口,那么这个值就必需配置,且必需为serviceClass指定接口实现类。
5、serviceFactory:可选。ServiceFactory控制服务创建和配置。
6、bindingProvider:设置bindingProvider,提供绑定相关信息。如端口等。
7、style:可选。参数样式。默认值为wrapped。可取值为wrapped、message、document 及rpc。
8、use:可选。指定编码类型。取值能够是encoding或litaral,现在XFire支持literal格式,即无编码。
9、scope:可选。指定服务生存周期。默认值为application,即在所以访问期间只创建一个服务,不用时能够会被持久化。能够是application、session或request。
invoker:可选。设置调用转接器。假如当服务实现类不是一个无格式java bean时invoker能够指定其调用方法。
excutor:可选值。能够为服务指定一个默认值以外实施策略。
handlers:能够使用inHandlers、outHandlers或faulterHandlers为服务指定输入、输出和犯错时调用处理。每个handler本身是一个XML解析处理句柄。
createDefaultBinding:可选。默认为true,即创建默认SOAP1.1 HTTP绑定。假如不想创建默认绑定,可将其值设为false。
绑定配置:每一个绑定全部要指定一个transport ID。下面是对应Transport和ID对应表。使用endpoint选项能够覆盖掉默认端口地址。
JMS
urn:xfire:transport:jms
Local
urn:xfire:transport:local
<name>ServiceName</name>
<serviceClass> com.yourcompany.yourpath..ServiceInterface</serviceClass>
<implementationClass>
com.yourcompany.yourpath.ServiceImplClass
</implementationClass>
<inHandlers>
<handler
handlerClass="com.yourcompany.yourpath.HandlerClass" />
</inHandlers>
用自己实际路径和类名替换上面配置就是一个经典XFire service配置。
六、用户端调用
用户端调用采取POJOs方法。在这种方法下要用到在服务端定义服务接口。具体代码以下:
Service serviceModel = new ObjectServiceFactory().create(
XFireProxyFactory serviceFactory = new XFireProxyFactory();
ServiceInterface service = (ServiceInterface) serviceFactory.create(
serviceModel, serviceURL);
Client client = Client.getInstance(service);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
data = service.serviceMethod();
注:其中ServiceInterface在实际工程中要以实际接口类型替换,serviceMethod以具体方法名替换。
在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文件中增加以下配置:
<filter-name>CompressingFilter</filter-name>
<filter-class>
</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>statsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<filter-mapping>
<filter-name>CompressingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
代码清单7-1:服务端加入GZip时web.xml中增加配置
注:依据web.xml文法定义,这个定义必需在servlet定义之前。
二、用户端启用GZip:用户端开启GZip只要将用户端GZip属性设为true却可。代码以下:
Service serviceModel = new ObjectServiceFactory().create(
XFireProxyFactory serviceFactory = new XFireProxyFactory();
ServiceInterface service = (ServiceInterface) serviceFactory.create(
serviceModel, serviceURL);
Client client = ((XFireProxy) Proxy.getInvocationHandler(service))
.getClient();
开启response压缩
client.setProperty(CommonsHttpMessageSender.
GZIP_RESPONSE_ENABLED, Boolean.TRUE);
client.setProperty(CommonsHttpMessageSender.
GZIP_RESPONSE_ENABLED,Boolean.TRUE);
同时开启response和request压缩
client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,
Boolean.TRUE);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
data = service.serviceMethod();
注:在同时启用时,无须再分别启用response和requestGZip压缩。
注意,当服务端没有启用GZip,用户端启用请求GZip压缩时,会产生SOAP解析错误,假如服务端开启了GZip压缩功效,用户端是否启用GZip全部没有影响。
展开阅读全文