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”如下:
期待遇上一位撑着油纸伞,结着忧愁丁香一样的姑娘;或者在春暖花开时,