Axis2中使用模块

1.模块

Axis2为模块提供一个延伸的支持。我们现在自定义一个模块并将其部署到我 们先前创建的MyService。为一个给定的Web Service部署一个自定义的模块,其 步骤如下:

1)建立Module Implementation。

2)创建Handlers。

3)修改”axis2.xml”。

4)修改”services.xml”,使你的模块在部署期生效。

5)将其打包为一个”.mar”(Module Archive)。

6)在Axis2上部署这个模块。

2.为MyService增加一个日志模块

现在我们在我们的例子程序中增加一个日志模块。这个模块包含一个handle ,用来记录所有传递给它的信息。Axis2使用”. mar” (Module Archive)来部署 模块。下图给出了需要被打包为”.mar”文档的文件结构。

步骤一:日志模块类

日志模块是Axis2模块的实现类。Axis2模块应该实 现”org.apache.axis2.modules.Module”接口中的如下方法。

public void init(ConfigurationContext configContext, AxisModule module)throws AxisFault;//Initialize the modulepublic void shutdown(AxisConfiguration axisSystem)throws AxisFault;//End of module processingpublic void engageNotify(AxisDescription axisDescription) throws AxisFault;

这些方法可以用来控制模块的初始化和终止。通过参数AxisConfiguration, 可提供给用户完整的配置层次。模块设计者可以使用它来很好的控制模块的所有 可能的操作。就这个简单的日志服务的例子而言,我们可以空实现这些类。

LoggingModule.java

package userguide.loggingmodule;import org.apache.axis2.AxisFault;import org.apache.axis2.context.ConfigurationContext;import org.apache.axis2.description.AxisDescription;import org.apache.axis2.description.AxisModule;import org.apache.axis2.modules.Module;public class LoggingModule implements Module {   // initialize the module   public void init(ConfigurationContext configContext, AxisModule module) throws AxisFault {}   public void engageNotify(AxisDescription axisDescription) throws AxisFault {}   // shutdown the module   public void shutdown(ConfigurationContext configurationContext) throws AxisFault {}   public String[] getPolicyNamespaces() {      return null;   }}

步骤二:LogHandler

Axis2中的模块可以包含一个或多个handlers用来在不同的阶段执行不同的 SOAP头处理。创建一个handler,应该实现org.apache.axis2.engine.Handler。 但是为简单起见,org.apache.axis2.handlers.AbstractHandler提供了一个对 Handler接口的抽象的实现。针对本例日志模块,我们将创建一个handler包含以 下方法:

1)”public void invoke(MessageContext ctx);”//当控制权转到handler时 ,由Axis2引擎调用。

2)”public void revoke(MessageContext ctx);”//当handlers被Axis2引擎 撤销时调用。

package userguide.loggingmodule;

import org.apache.axis2.AxisFault;import org.apache.axis2.context.MessageContext;import org.apache.axis2.engine.Handler;import org.apache.axis2.handlers.AbstractHandler;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFacTory;import javax.xml.namespace.QName;@SuppressWarnings("serial")public class LogHandler extends AbstractHandler implements Handler {    private static final Log log = LogFacTory.getLog (LogHandler.class);   private QName name;   public QName getName() {     return name;   }   public void invoke(MessageContext msgContext) throws AxisFault {     log.info(msgContext.getEnvelope().toString());   }   public void revoke(MessageContext msgContext) {     log.info(msgContext.getEnvelope().toString());   }   public void setName(QName name) {     this.name = name;   }}

步骤三:module.xml

“module.xml”包含了每一个特定的模块的部署配置信息。它应该包含的细节 有一个实现模块的类(本例中是”LoggingModule”和各种各样的将在不同阶段运 行的handlers)。本例中配置日志模块的”module.xml”如下:

                   期待遇上一位撑着油纸伞,结着忧愁丁香一样的姑娘;或者在春暖花开时,

Axis2中使用模块

相关文章:

你感兴趣的文章:

标签云: