Axis2服务器端SOAP请求

时间:2014-03-13 15:29:36

标签: java logging soap request axis2

我打算记录我服务器上客户端发送的SOAP信封(JBoss 4.2.0 GA)。我遵循了以下教程: http://axis.apache.org/axis2/java/core/docs/modules.html

但这根本不起作用。我做的事情如下:

1-实施 LogHandler ,如下所示:

package com.on.handler;

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;

public class LogHandler extends AbstractHandler implements Handler {
private static final Log log = LogFactory.getLog(LogHandler.class);
private String name;

public String getName() {
    return name;
}

public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
         log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TEST MESSAGEEEEEEEEEEEEEEEEEEE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    log.info(msgContext.getEnvelope().toString());
    return InvocationResponse.CONTINUE;        
}

public void revoke(MessageContext msgContext) {
    log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TEST MESSAGEEEEEEEEEEEEEEEEEEE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    log.info(msgContext.getEnvelope().toString());
}

public void setName(String name) {
    log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TEST MESSAGEEEEEEEEEEEEEEEEEEE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    this.name = name;
}

}

2-实施 LoggingModule ,如下所示:

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;    
    }

    public void applyPolicy(Policy policy, AxisDescription axisDescription) throws AxisFault {
    }

    public boolean canSupportAssertion(Assertion assertion) {
        return true;
    }
}

3-创建了一个META-INF文件夹,在该文件夹下我放置了以下 module.xml 文件:

<module name="logging" class="com.on.handler.LoggingModule">
   <InFlow>
        <handler name="InFlowLogHandler" class="com.on.handler.LogHandler">
        <order phase="loggingPhase" />
        </handler>
   </InFlow>

   <OutFlow>
        <handler name="OutFlowLogHandler" class="com.on.handler.LogHandler">
        <order phase="loggingPhase"/>
        </handler>
   </OutFlow>

   <OutFaultFlow>
        <handler name="FaultOutFlowLogHandler" class="com.on.handler.LogHandler">
        <order phase="loggingPhase"/>
        </handler>
   </OutFaultFlow>

   <InFaultFlow>
        <handler name="FaultInFlowLogHandler" class="com.on.handler.LogHandler">
        <order phase="loggingPhase"/>
        </handler>
   </InFaultFlow>
</module>

4-我创建了一个包含上述内容的.mar文件并将其命名为 customLoggingHandler.mar

5-这是我的.aar文件中的 service.xml 文件:

<service name="MyServiceWS" >
    <description>
        Please Type your service description here
    </description>
    <module ref="logging"/>
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
    <parameter name="ServiceClass">webservices.MyServiceWS</parameter>
</service>

6-编辑了我的axis2.xml文件,特别是以下部分:

<phaseOrder type="InFlow">
    <!--  System predefined phases       -->
    <phase name="Transport">
        <handler name="RequestURIBasedDispatcher"
                 class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
            <order phase="Transport"/>
        </handler>
        <handler name="SOAPActionBasedDispatcher"
                 class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
            <order phase="Transport"/>
        </handler>
    </phase>
    <phase name="Addressing">
        <handler name="AddressingBasedDispatcher"
                 class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
            <order phase="Addressing"/>
        </handler>
    </phase>
    <phase name="Security"/>
    <phase name="PreDispatch"/>
    <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
        <handler name="RequestURIBasedDispatcher"
                 class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
        <handler name="SOAPActionBasedDispatcher"
                 class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
        <handler name="RequestURIOperationDispatcher"
                 class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
        <handler name="SOAPMessageBodyBasedDispatcher"
                 class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
        <handler name="HTTPLocationBasedDispatcher"
                 class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
        <handler name="GenericProviderDispatcher"
                 class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
        <handler name="MustUnderstandValidationDispatcher"
                 class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
    </phase>
    <phase name="RMPhase"/>
    <!--  System predefined phases       -->
    <!--   After Postdispatch phase module author or service author can add any phase he want      -->
    <phase name="OperationInPhase">
    <phase name="loggingPhase"/>
        <handler name="MustUnderstandChecker"
                 class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">
            <order phase="OperationInPhase"/>
        </handler>
    </phase>
    <phase name="soapmonitorPhase"/>
</phaseOrder>
<phaseOrder type="OutFlow">
    <!--      user can add his own phases to this area  -->
    <phase name="soapmonitorPhase"/>
    <phase name="OperationOutPhase"/>
    <phase name="loggingPhase"/>
    <!--system predefined phase-->
    <!--these phase will run irrespective of the service-->
    <phase name="RMPhase"/>
    <phase name="PolicyDetermination"/>
    <phase name="MessageOut"/>
    <phase name="Security"/>
</phaseOrder>
<phaseOrder type="InFaultFlow">
    <phase name="loggingPhase"/>
    <phase name="Addressing">
        <handler name="AddressingBasedDispatcher"
                 class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
            <order phase="Addressing"/>
        </handler>
    </phase>
    <phase name="Security"/>
    <phase name="PreDispatch"/>
    <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
        <handler name="RequestURIBasedDispatcher"
                 class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
        <handler name="SOAPActionBasedDispatcher"
                 class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
        <handler name="RequestURIOperationDispatcher"
                 class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
        <handler name="SOAPMessageBodyBasedDispatcher"
                 class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
        <handler name="HTTPLocationBasedDispatcher"
                 class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
        <handler name="GenericProviderDispatcher"
                 class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
        <handler name="MustUnderstandValidationDispatcher"
                 class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
    </phase>
    <phase name="RMPhase"/>
    <!--      user can add his own phases to this area  -->
    <phase name="OperationInFaultPhase"/>
    <phase name="soapmonitorPhase"/>
</phaseOrder>
<phaseOrder type="OutFaultFlow">
    <!--      user can add his own phases to this area  -->
    <phase name="soapmonitorPhase"/>
    <phase name="OperationOutFaultPhase"/>
    <phase name="loggingPhase"/>
    <phase name="RMPhase"/>
    <phase name="PolicyDetermination"/>
    <phase name="MessageOut"/>
    <phase name="Security"/>
</phaseOrder>

7-将我的log4j.properties文件更改为Axis2_Home/WEB-INF/classes,所以它变为如下:

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE
log4j.rootCategory=DEBUG, CONSOLE, LOGFILE

# Set the enterprise logger priority to FATAL
log4j.logger.org.apache.axis2.enterprise=FATAL
log4j.logger.de.hunsicker.jalopy.io=FATAL
log4j.logger.httpclient.wire.header=FATAL
log4j.logger.org.apache.commons.httpclient=FATAL

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=/home/moe/axis2.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

#log4j.logger.org.apache.axis2.transport.http.server.wire=DEBUG

8-将 customLoggingHandler.mar 文件名添加到Axis2_Home / WEB-INF / modules

下的modules.list文件中

尽管如此,我仍然无法在“/home/moe/axis2.log”下查看我的SOAP请求甚至响应,也无法在JBoss的server.log

中看到

我错过了什么?

更新 显然我的模块没有被使用,虽然我正在我的service.xml文件中正确引用它。为了验证这一点,我为每个创建文件的LogHandler方法添加了一个小逻辑:

File file = new File("/home/moe/fileeeeeeeeeeeeeeeeeeeeeeeeeee.txt");
    try {
        file.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

并且未创建文件,这意味着没有调用 LogHandler 类方法。

0 个答案:

没有答案