You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2007/01/11 05:04:33 UTC

svn commit: r495106 [8/10] - in /webservices/axis2/trunk/java/modules: integration/ integration/test/org/apache/axis2/engine/ integration/test/org/apache/axis2/mtom/ kernel/src/org/apache/axis2/addressing/ kernel/src/org/apache/axis2/client/ kernel/src...

Added: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveBTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveBTest.java?view=auto&rev=495106
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveBTest.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/engine/MessageContextSaveBTest.java Wed Jan 10 20:04:31 2007
@@ -0,0 +1,985 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.axis2.engine;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.context.ServiceGroupContext;
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.HandlerDescription;
+import org.apache.axis2.description.InOutAxisOperation;
+import org.apache.axis2.description.TransportInDescription;
+import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.handlers.AbstractHandler;
+import org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver;
+import org.apache.axis2.receivers.RawXMLINOutMessageReceiver;
+import org.apache.axis2.transport.http.CommonsHTTPTransportSender;
+import org.apache.axis2.transport.http.SimpleHTTPServer;
+import org.apache.axis2.util.ObjectStateUtils;
+import org.apache.axis2.util.UUIDGenerator;
+import org.apache.axis2.wsdl.WSDLConstants;
+
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class MessageContextSaveBTest extends TestCase 
+{
+    private String testArg = null;
+
+    //-------------------------------------------------------------------------
+    // test key-value pairs
+    //-------------------------------------------------------------------------
+    private String [] serviceKeys = {
+        "serviceKey1",
+        "serviceKey2", 
+        "serviceKey3" 
+    };
+
+    private String [] serviceValues = {
+        "serviceValue1",
+        "serviceValue2", 
+        "serviceValue3"
+    };
+
+    //-------------------------------------------------------------------------
+    // variables for the object graph 
+    //-------------------------------------------------------------------------
+    // used on a save/restore of the message context
+    // has a full object graph with 3 sets of service groups 
+    // and associated objects
+    private ConfigurationContext configurationContext = null;
+    private AxisConfiguration    axisConfiguration = null;
+
+    //------------------------------
+    // service group ABC
+    //------------------------------
+    private String serviceGroupName_ABC = "ABCServiceGroup";
+
+    private String serviceName_A        = "ServiceA";
+    private String serviceName_B        = "ServiceB";
+    private String serviceName_C        = "ServiceC";
+    private QName service_QName_A = new QName(serviceName_A);
+    private QName service_QName_B = new QName(serviceName_B);
+    private QName service_QName_C = new QName(serviceName_C);
+
+    private String operationName_A1   = "TestOperationA1";
+    private String operationName_A2   = "TestOperationA2";
+    private QName  operation_QName_A1 = new QName(operationName_A1);
+    private QName  operation_QName_A2 = new QName(operationName_A2);
+
+    private ServiceGroupContext  srvGrpCtx_ABC  = null;
+    private AxisServiceGroup     axisSrvGrp_ABC = null;
+
+    private ServiceContext       srvCtx_A      = null;
+    private ServiceContext       srvCtx_B      = null;
+    private ServiceContext       srvCtx_C      = null;
+    private AxisService          axisSrv_A     = null;
+    private AxisService          axisSrv_B     = null;
+    private AxisService          axisSrv_C     = null;
+
+    private OperationContext     opCtx_A1      = null;
+    private OperationContext     opCtx_A2      = null;
+    private AxisOperation        axisOp_A1     = null;
+    private AxisOperation        axisOp_A2     = null;
+
+    private MessageContext       msgCtx_A1     = null;
+    private MessageContext       msgCtx_A2     = null;
+    //private AxisMessage          axisMsg_A1    = null;
+    //private AxisMessage          axisMsg_A2    = null;
+
+    //------------------------------
+    // service group 123
+    //------------------------------
+    private String serviceGroupName_123 = "123ServiceGroup";
+
+    private String serviceName_1        = "Service1";
+    private String serviceName_2        = "Service2";
+    private String serviceName_3        = "Service3";
+    private String serviceName_4        = "Service4";
+    private QName service_QName_1 = new QName(serviceName_1);
+    private QName service_QName_2 = new QName(serviceName_2);
+    private QName service_QName_3 = new QName(serviceName_3);
+    private QName service_QName_4 = new QName(serviceName_4);
+
+    private String operationName_1_1   = "TestOperation1_1";
+    private String operationName_1_2   = "TestOperation1_2";
+    private QName  operation_QName_1_1 = new QName(operationName_1_1);
+    private QName  operation_QName_1_2 = new QName(operationName_1_2);
+
+    private ServiceGroupContext  srvGrpCtx_123  = null;
+    private AxisServiceGroup     axisSrvGrp_123 = null;
+
+    private ServiceContext       srvCtx_1      = null;
+    private ServiceContext       srvCtx_2      = null;
+    private ServiceContext       srvCtx_3      = null;
+    private ServiceContext       srvCtx_4      = null;
+    private AxisService          axisSrv_1     = null;
+    private AxisService          axisSrv_2     = null;
+    private AxisService          axisSrv_3     = null;
+    private AxisService          axisSrv_4     = null;
+
+    private OperationContext     opCtx_1_1     = null;
+    private OperationContext     opCtx_1_2     = null;
+    private AxisOperation        axisOp_1_1    = null;
+    private AxisOperation        axisOp_1_2    = null;
+
+    private MessageContext       msgCtx_1_1    = null;
+    private MessageContext       msgCtx_1_2    = null;
+    //private AxisMessage          axisMsg_1_1   = null;
+    //private AxisMessage          axisMsg_1_2   = null;
+
+
+    //------------------------------
+    // service group DAY
+    //------------------------------
+    private String serviceGroupName_DAY = "DayServiceGroup";
+
+    private String serviceName_Mon      = "MondayService";
+    private String serviceName_Tue      = "TuesdayService";
+    private String serviceName_Wed      = "WednesdayService";
+    private String serviceName_Thu      = "ThursdayService";
+    private String serviceName_Fri      = "FridayService";
+    private QName service_QName_Mon = new QName(serviceName_Mon);
+    private QName service_QName_Tue = new QName(serviceName_Tue);
+    private QName service_QName_Wed = new QName(serviceName_Wed);
+    private QName service_QName_Thu = new QName(serviceName_Thu);
+    private QName service_QName_Fri = new QName(serviceName_Fri);
+
+    private String operationName_Mon_1   = "TestOperation_Mon_1";
+    private String operationName_Mon_2   = "TestOperation_Mon_2";
+    private QName  operation_QName_Mon_1 = new QName(operationName_Mon_1);
+    private QName  operation_QName_Mon_2 = new QName(operationName_Mon_2);
+
+    private ServiceGroupContext  srvGrpCtx_DAY  = null;
+    private AxisServiceGroup     axisSrvGrp_DAY = null;
+
+    private ServiceContext       srvCtx_Mon    = null;
+    private ServiceContext       srvCtx_Tue    = null;
+    private ServiceContext       srvCtx_Wed    = null;
+    private ServiceContext       srvCtx_Thu    = null;
+    private ServiceContext       srvCtx_Fri    = null;
+    private AxisService          axisSrv_Mon   = null;
+    private AxisService          axisSrv_Tue   = null;
+    private AxisService          axisSrv_Wed   = null;
+    private AxisService          axisSrv_Thu   = null;
+    private AxisService          axisSrv_Fri   = null;
+
+    private OperationContext     opCtx_Mon_1   = null;
+    private OperationContext     opCtx_Mon_2   = null;
+    private AxisOperation        axisOp_Mon_1  = null;
+    private AxisOperation        axisOp_Mon_2  = null;
+
+    private MessageContext       msgCtx_Mon_1  = null;
+    private MessageContext       msgCtx_Mon_2  = null;
+    //private AxisMessage          axisMsg_Mon_1 = null;
+    //private AxisMessage          axisMsg_Mon_2 = null;
+
+
+
+    //-------------------------------------
+    //  objects needed for message context
+    //------------------------------------
+
+    private TransportOutDescription transportOut  = null;
+    private TransportOutDescription transportOut2 = null;
+    private TransportOutDescription transportOut3 = null;
+    private TransportInDescription  transportIn   = null;
+    private TransportInDescription  transportIn2  = null;
+    private TransportInDescription  transportIn3  = null;
+
+    private Phase phase1       = null;
+
+    private ArrayList executedHandlers = null;
+
+    private MessageContext restoredMessageContext = null;
+
+
+    //-------------------------------------------------------------------------
+    // methods
+    //-------------------------------------------------------------------------
+
+
+    public MessageContextSaveBTest(String arg0)
+    {
+        super(arg0);
+        testArg = new String(arg0);
+
+        try
+        {
+            prepare();
+        }
+        catch (Exception e)
+        {
+            System.out.println("MessageContextSaveBTest:constructor:  error in setting up object graph ["+e.getClass().getName()+" : "+e.getMessage()+"]");
+        }
+    }
+
+
+    //
+    // prepare the object hierarchy for testing
+    //
+    private void prepare() throws Exception
+    {
+        //-----------------------------------------------------------------
+        // setup the top-level objects
+        //-----------------------------------------------------------------
+
+        axisConfiguration = new AxisConfiguration();
+
+        configurationContext = new ConfigurationContext(axisConfiguration);
+
+        configurationContext.getAxisConfiguration().addMessageReceiver("http://www.w3.org/2004/08/wsdl/in-only", new RawXMLINOnlyMessageReceiver()); 
+        configurationContext.getAxisConfiguration().addMessageReceiver("http://www.w3.org/2004/08/wsdl/in-out", new RawXMLINOutMessageReceiver()); 
+
+        DispatchPhase dispatchPhase = new DispatchPhase();
+        dispatchPhase.setName("Dispatch");
+
+        AddressingBasedDispatcher abd = new AddressingBasedDispatcher();
+        abd.initDispatcher();
+
+        RequestURIBasedDispatcher rud = new RequestURIBasedDispatcher();
+        rud.initDispatcher();
+
+        SOAPActionBasedDispatcher sabd = new SOAPActionBasedDispatcher();
+        sabd.initDispatcher();
+
+        SOAPMessageBodyBasedDispatcher smbd = new SOAPMessageBodyBasedDispatcher();
+        smbd.initDispatcher();
+
+        InstanceDispatcher id = new InstanceDispatcher();
+        id.init(new HandlerDescription(new String("InstanceDispatcher")));
+
+        dispatchPhase.addHandler(abd);
+        dispatchPhase.addHandler(rud);
+        dispatchPhase.addHandler(sabd);
+        dispatchPhase.addHandler(smbd);
+        dispatchPhase.addHandler(id);
+
+        configurationContext.getAxisConfiguration().getGlobalInFlow().add(dispatchPhase);
+
+        //----------------------------
+        // transport-related objects
+        //----------------------------
+        transportOut  = new TransportOutDescription(new QName("null"));
+        transportOut2 = new TransportOutDescription(new QName("happy"));
+        transportOut3 = new TransportOutDescription(new QName("golucky"));
+        transportOut.setSender(new CommonsHTTPTransportSender());
+        transportOut2.setSender(new CommonsHTTPTransportSender());
+        transportOut3.setSender(new CommonsHTTPTransportSender());
+
+        axisConfiguration.addTransportOut(transportOut3);
+        axisConfiguration.addTransportOut(transportOut2);
+        axisConfiguration.addTransportOut(transportOut);
+
+        transportIn = new TransportInDescription(new QName("null"));
+        transportIn2 = new TransportInDescription(new QName("always"));
+        transportIn3 = new TransportInDescription(new QName("thebest"));
+        transportIn.setReceiver(new SimpleHTTPServer());
+        transportIn2.setReceiver(new SimpleHTTPServer());
+        transportIn3.setReceiver(new SimpleHTTPServer());
+
+        axisConfiguration.addTransportIn(transportIn2);
+        axisConfiguration.addTransportIn(transportIn);
+        axisConfiguration.addTransportIn(transportIn3);
+
+        //----------------------------
+        // phase-related objects
+        //----------------------------
+        phase1 = new Phase("Phase1");
+        phase1.addHandler(new TempHandler(1,2));
+        phase1.addHandler(new HandlerMCS(2, true));
+        phase1.addHandler(new TempHandler(3,2));
+
+        ArrayList phases = new ArrayList();
+        phases.add(phase1);
+
+        axisConfiguration.setInPhasesUptoAndIncludingPostDispatch(phases);
+
+
+        //-----------------------------------------------------------------
+        // setup the axis side of the hierachy
+        //-----------------------------------------------------------------
+        // ABC group
+        //----------------------------
+        axisSrvGrp_ABC = new AxisServiceGroup(axisConfiguration); 
+        axisSrvGrp_ABC.setServiceGroupName(serviceGroupName_ABC);
+
+        axisSrv_A = new AxisService(service_QName_A.getLocalPart()); 
+        axisSrv_B = new AxisService(service_QName_B.getLocalPart()); 
+        axisSrv_C = new AxisService(service_QName_C.getLocalPart()); 
+
+        axisSrvGrp_ABC.addService(axisSrv_A); 
+        axisSrvGrp_ABC.addService(axisSrv_B); 
+        axisSrvGrp_ABC.addService(axisSrv_C); 
+
+        axisOp_A1 = new InOutAxisOperation(operation_QName_A1); 
+        axisOp_A2 = new InOutAxisOperation(operation_QName_A2);  
+
+        axisOp_A1.setMessageReceiver(new MessageReceiver()
+                                     {
+                                         public void receive(MessageContext messageCtx)
+                                         {
+                                         }
+                                     });
+
+        axisOp_A2.setMessageReceiver(new MessageReceiver()
+                                     {
+                                         public void receive(MessageContext messageCtx)
+                                         {
+                                         }
+                                     });
+
+        axisSrv_A.addOperation(axisOp_A1);
+        axisSrv_A.mapActionToOperation(operation_QName_A1.getLocalPart(), axisOp_A1);
+
+        axisSrv_A.addOperation(axisOp_A2);
+        axisSrv_A.mapActionToOperation(operation_QName_A2.getLocalPart(), axisOp_A2);
+
+        axisConfiguration.addService(axisSrv_A);
+        axisConfiguration.addService(axisSrv_B);
+        axisConfiguration.addService(axisSrv_C);
+
+
+        axisOp_A1.getRemainingPhasesInFlow().add(phase1);
+        axisOp_A2.getRemainingPhasesInFlow().add(phase1);
+
+
+        //----------------------------
+        // 123 group
+        //----------------------------
+        axisSrvGrp_123 = new AxisServiceGroup(axisConfiguration); 
+        axisSrvGrp_123.setServiceGroupName(serviceGroupName_123);
+
+        axisSrv_1 = new AxisService(service_QName_1.getLocalPart()); 
+        axisSrv_2 = new AxisService(service_QName_2.getLocalPart()); 
+        axisSrv_3 = new AxisService(service_QName_3.getLocalPart()); 
+        axisSrv_4 = new AxisService(service_QName_4.getLocalPart()); 
+
+        axisSrvGrp_123.addService(axisSrv_1); 
+        axisSrvGrp_123.addService(axisSrv_2); 
+        axisSrvGrp_123.addService(axisSrv_3); 
+        axisSrvGrp_123.addService(axisSrv_4); 
+
+        axisOp_1_1 = new InOutAxisOperation(operation_QName_1_1); 
+        axisOp_1_2 = new InOutAxisOperation(operation_QName_1_2);  
+
+        axisOp_1_1.setMessageReceiver(new MessageReceiver()
+                                      {
+                                          public void receive(MessageContext messageCtx)
+                                          {
+                                          }
+                                      });
+
+        axisOp_1_2.setMessageReceiver(new MessageReceiver()
+                                      {
+                                          public void receive(MessageContext messageCtx)
+                                          {
+                                          }
+                                      });
+
+        axisSrv_1.addOperation(axisOp_1_1);
+        axisSrv_1.mapActionToOperation(operation_QName_1_1.getLocalPart(), axisOp_1_1);
+
+        axisSrv_1.addOperation(axisOp_1_2);
+        axisSrv_1.mapActionToOperation(operation_QName_1_2.getLocalPart(), axisOp_1_2);
+
+        axisConfiguration.addService(axisSrv_1);
+        axisConfiguration.addService(axisSrv_2);
+        axisConfiguration.addService(axisSrv_3);
+        axisConfiguration.addService(axisSrv_4);
+
+        axisOp_1_1.getRemainingPhasesInFlow().add(phase1);
+        axisOp_1_2.getRemainingPhasesInFlow().add(phase1);
+
+
+
+        //----------------------------
+        // DAY group
+        //----------------------------
+        axisSrvGrp_DAY = new AxisServiceGroup(axisConfiguration); 
+        axisSrvGrp_DAY.setServiceGroupName(serviceGroupName_DAY);
+
+        axisSrv_Mon = new AxisService(service_QName_Mon.getLocalPart()); 
+        axisSrv_Tue = new AxisService(service_QName_Tue.getLocalPart()); 
+        axisSrv_Wed = new AxisService(service_QName_Wed.getLocalPart()); 
+        axisSrv_Thu = new AxisService(service_QName_Thu.getLocalPart()); 
+        axisSrv_Fri = new AxisService(service_QName_Fri.getLocalPart()); 
+
+        axisSrvGrp_DAY.addService(axisSrv_Mon); 
+        axisSrvGrp_DAY.addService(axisSrv_Tue); 
+        axisSrvGrp_DAY.addService(axisSrv_Wed); 
+        axisSrvGrp_DAY.addService(axisSrv_Thu); 
+        axisSrvGrp_DAY.addService(axisSrv_Fri); 
+
+        axisOp_Mon_1 = new InOutAxisOperation(operation_QName_Mon_1); 
+        axisOp_Mon_2 = new InOutAxisOperation(operation_QName_Mon_2);  
+
+        axisOp_Mon_1.setMessageReceiver(new MessageReceiver()
+                                        {
+                                            public void receive(MessageContext messageCtx)
+                                            {
+                                            }
+                                        });
+
+        axisOp_Mon_2.setMessageReceiver(new MessageReceiver()
+                                        {
+                                            public void receive(MessageContext messageCtx)
+                                            {
+                                            }
+                                        });
+
+        axisSrv_Mon.addOperation(axisOp_Mon_1);
+        axisSrv_Mon.mapActionToOperation(operation_QName_Mon_1.getLocalPart(), axisOp_Mon_1);
+
+        axisSrv_Mon.addOperation(axisOp_Mon_2);
+        axisSrv_Mon.mapActionToOperation(operation_QName_Mon_2.getLocalPart(), axisOp_Mon_2);
+
+        axisConfiguration.addService(axisSrv_Mon);
+        axisConfiguration.addService(axisSrv_Tue);
+        axisConfiguration.addService(axisSrv_Wed);
+        axisConfiguration.addService(axisSrv_Thu);
+        axisConfiguration.addService(axisSrv_Fri);
+
+        axisOp_Mon_1.getRemainingPhasesInFlow().add(phase1);
+        axisOp_Mon_2.getRemainingPhasesInFlow().add(phase1);
+
+
+        //-----------------------------------------------------------------
+        // setup the context objects
+        //-----------------------------------------------------------------
+        srvGrpCtx_ABC = new ServiceGroupContext(configurationContext, axisSrvGrp_ABC);  
+        srvGrpCtx_ABC.setId(serviceGroupName_ABC);
+
+        srvGrpCtx_123 = new ServiceGroupContext(configurationContext, axisSrvGrp_123);  
+        srvGrpCtx_123.setId(serviceGroupName_ABC);
+
+        srvGrpCtx_DAY = new ServiceGroupContext(configurationContext, axisSrvGrp_DAY);  
+        srvGrpCtx_DAY.setId(serviceGroupName_DAY);
+
+        srvCtx_A = srvGrpCtx_ABC.getServiceContext(axisSrv_A);
+        srvCtx_B = srvGrpCtx_ABC.getServiceContext(axisSrv_B); 
+        srvCtx_C = srvGrpCtx_ABC.getServiceContext(axisSrv_C);
+
+        srvCtx_1 = srvGrpCtx_123.getServiceContext(axisSrv_1);
+        srvCtx_2 = srvGrpCtx_123.getServiceContext(axisSrv_2); 
+        srvCtx_3 = srvGrpCtx_123.getServiceContext(axisSrv_3);
+        srvCtx_4 = srvGrpCtx_123.getServiceContext(axisSrv_4);
+
+        srvCtx_Mon = srvGrpCtx_DAY.getServiceContext(axisSrv_Mon);
+        srvCtx_Tue = srvGrpCtx_DAY.getServiceContext(axisSrv_Tue); 
+        srvCtx_Wed = srvGrpCtx_DAY.getServiceContext(axisSrv_Wed);
+        srvCtx_Thu = srvGrpCtx_DAY.getServiceContext(axisSrv_Thu);
+        srvCtx_Fri = srvGrpCtx_DAY.getServiceContext(axisSrv_Fri);
+
+        opCtx_A1 = srvCtx_A.createOperationContext(operation_QName_A1);
+        opCtx_A2 = srvCtx_A.createOperationContext(operation_QName_A2);
+
+        opCtx_1_1 = srvCtx_1.createOperationContext(operation_QName_1_1);
+        opCtx_1_2 = srvCtx_1.createOperationContext(operation_QName_1_2);
+
+        opCtx_Mon_1 = srvCtx_Mon.createOperationContext(operation_QName_Mon_1);
+        opCtx_Mon_2 = srvCtx_Mon.createOperationContext(operation_QName_Mon_2);
+
+        //----------------------------------------
+        // message context objects
+        //----------------------------------------
+        msgCtx_A1 = createMessageContext(opCtx_A1);
+        msgCtx_A2 = createMessageContext(opCtx_A2);
+
+        msgCtx_1_1 = createMessageContext(opCtx_1_1);
+        msgCtx_1_2 = createMessageContext(opCtx_1_2);
+
+        msgCtx_Mon_1 = createMessageContext(opCtx_Mon_1);
+        msgCtx_Mon_2 = createMessageContext(opCtx_Mon_2);
+
+        //-----------------------------------------------------------------
+        // other objects
+        //-----------------------------------------------------------------
+        executedHandlers = new ArrayList();
+    }
+
+
+    private MessageContext createMessageContext(OperationContext oc) throws Exception
+    {
+        MessageContext mc = new MessageContext();
+
+        mc.setConfigurationContext(configurationContext);
+        mc.setTransportIn(transportIn);
+        mc.setTransportOut(transportOut);
+
+        mc.setServerSide(true);
+        mc.setProperty(MessageContext.TRANSPORT_OUT, System.out);
+
+        SOAPFactory omFac = OMAbstractFactory.getSOAP11Factory();
+        mc.setEnvelope(omFac.getDefaultEnvelope());
+
+        AxisOperation axisOperation = oc.getAxisOperation();
+        String action = axisOperation.getName().getLocalPart();
+        mc.setSoapAction(action);
+        System.out.flush();
+
+        mc.setMessageID(UUIDGenerator.getUUID());
+
+        axisOperation.registerOperationContext(mc,oc);
+        mc.setOperationContext(oc);
+
+        ServiceContext sc = oc.getServiceContext();
+        mc.setServiceContext(sc);
+
+        mc.setTo(new EndpointReference("axis2/services/NullService")); 
+        mc.setWSAAction("DummyOp");
+
+        AxisMessage axisMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+        mc.setAxisMessage(axisMessage);
+
+        return mc;
+    }
+
+    protected void setUp() throws Exception 
+    {
+        //org.apache.log4j.BasicConfigurator.configure();
+    }
+
+    public void testServiceProperties() throws Exception 
+    {
+        String title = "MessageContextSaveBTest: testServiceProperties(): ";
+
+        AxisEngine engine = new AxisEngine(configurationContext);
+
+        MessageContext mc = msgCtx_1_1;
+
+        // add some service-level properties
+        String suffix = "_before";
+        addServiceProperties(mc,suffix);
+
+        // get the service level properties into a separate table
+        Map properties_original = new HashMap(getServiceProperties(mc));
+        showProperties(properties_original, "original properties");
+
+        System.out.println(title+"start - - engine.receive(mc) - - - - - - - - - - - - - - - -");
+        engine.receive(mc);
+
+        // get the service level properties into a separate table
+        Map properties2 = new HashMap(getServiceProperties(restoredMessageContext));
+        showProperties(properties2, "restored properties");
+
+        // add some more properties
+        suffix = "_postReceive";
+        addServiceProperties(restoredMessageContext,suffix);
+
+        // resume the paused message context
+        System.out.println(title+"resume - - engine.resume(mc) - - - - - - - - - - - - - - - -");
+        engine.resume(restoredMessageContext);
+
+        // get the service level properties into a separate table
+        Map properties3 = new HashMap(getServiceProperties(restoredMessageContext));
+        showProperties(properties3, "restored service properties post-resume");
+
+        // get the service level properties from the other message context
+        // in the same service 
+        Map properties4 = getServiceProperties(msgCtx_1_2);
+        showProperties(properties4, "service properties from other active MsgCtx");
+
+        // the service level properties should be the same
+        boolean isOk = ObjectStateUtils.isEquivalent(properties3, properties4, true);
+        assertTrue(isOk);
+
+    }
+
+
+    private Map getServiceProperties(MessageContext mc)
+    {
+        Map properties = null;
+
+        // get the service context from the message context
+        ServiceContext serviceContext = mc.getServiceContext();
+
+        if (serviceContext == null)
+        {
+            // get the service context from the operation context
+            OperationContext operationContext = mc.getOperationContext();
+            serviceContext = operationContext.getServiceContext();
+        }
+
+        if (serviceContext != null)
+        {
+            properties = serviceContext.getProperties();
+        }
+
+        return properties;
+    }
+
+    private void addServiceProperties(MessageContext mc, String suffix)
+    {
+        // get the service context from the message context
+        ServiceContext serviceContext = mc.getServiceContext();
+
+        if (serviceContext == null)
+        {
+            // get the service context from the operation context
+            OperationContext operationContext = mc.getOperationContext();
+            serviceContext = operationContext.getServiceContext();
+        }
+
+        if (serviceContext != null)
+        {
+            for (int k=0; k<serviceKeys.length; k++)
+            {
+                String key = serviceKeys[k];
+                String value = serviceValues[k] + suffix;
+
+                serviceContext.setProperty(key,value);
+            }
+        }
+    }
+
+
+    private void showProperties(Map map, String description)
+    {
+        System.out.println(description+" ======================================");
+        if ((map == null) || (map.isEmpty()))
+        {
+            System.out.println(description+": No properties");
+            System.out.println(description+" ======================================");
+            return;
+        }
+
+        Iterator it = map.keySet().iterator();
+
+        while (it.hasNext())
+        {
+            String key = (String) it.next();
+
+            String value = (String) map.get(key);
+
+            System.out.println(description+": key-value pair ["+key+"]["+value+"]");
+        }
+        System.out.println(description+" ======================================");
+    }
+
+
+    /**
+     * Gets the ID associated with the handler object.
+     * 
+     * @param o      The handler object
+     * @return The ID associated with the handler,
+     *         -1 otherwise
+     */
+    private int getHandlerID(Object o)
+    {
+        int id = -1;
+
+        if (o instanceof TempHandler)
+        {
+            id = ((TempHandler)o).getHandlerID();
+        }
+
+        return id;
+    }
+
+
+
+    //=========================================================================
+    // Handler classes 
+    //=========================================================================
+
+    /**
+     * Performs a save and restore on the message context
+     */
+    public class HandlerMCS extends AbstractHandler
+    {
+        private Integer handlerID = null;
+
+        private File   theFile     = null;
+        private String theFilename = null;
+
+        private boolean pause      = false;
+        private boolean savedOk    = false;
+        private boolean restoredOk = false;
+        private boolean comparesOk = false;
+
+        //-----------------------------------------------------------------
+        // constructors
+        //-----------------------------------------------------------------
+
+        public HandlerMCS()
+        {
+            this.handlerID = new Integer(-5);
+        }
+
+        public HandlerMCS(int index, boolean pause)
+        {
+            this.handlerID = new Integer(index);
+            this.pause = pause;
+            init(new HandlerDescription(new String("handler" + index)));
+        }
+
+        public HandlerMCS(int index)
+        {
+            this.handlerID = new Integer(index);
+            init(new HandlerDescription(new String("handler" + index)));
+        }
+
+
+
+        //-----------------------------------------------------------------
+        // methods
+        //-----------------------------------------------------------------
+
+        public int getHandlerID()
+        {
+            if (handlerID != null)
+            {
+                return handlerID.intValue();
+            }
+
+            return -5;
+        }
+
+
+        public InvocationResponse invoke(MessageContext msgContext) throws AxisFault
+        {
+            String title = "HandlerMCS["+getHandlerID()+"]:invoke(): ";
+            System.out.println(title + "pause = ["+pause+"]");
+            savedOk    = false;
+            restoredOk = false;
+
+            if (pause)
+            {
+                System.out.println(title + "msgContext.pause()");
+                msgContext.pause();
+                pause = false;
+
+                try
+                {
+                    theFile = File.createTempFile("mcSave",null);
+                    theFilename = theFile.getName();
+                    System.out.println(title + "temp file = ["+theFilename+"]");
+                }
+                catch (Exception ex)
+                {
+                    System.out.println(title + "error creating temp file = ["+ex.getMessage()+"]");
+                    theFile = null;
+                }
+
+                if (theFile != null)
+                {
+                    // ---------------------------------------------------------
+                    // save to the temporary file
+                    // ---------------------------------------------------------
+                    try
+                    {
+                        // setup an output stream to a physical file
+                        FileOutputStream outStream = new FileOutputStream(theFile);
+
+                        // attach a stream capable of writing objects to the 
+                        // stream connected to the file
+                        ObjectOutputStream outObjStream = new ObjectOutputStream(outStream);
+
+                        // try to save the message context
+                        System.out.println(title + "saving message context.....");
+                        savedOk = false;
+                        outObjStream.writeObject(msgContext);
+
+                        // close out the streams
+                        outObjStream.flush();
+                        outObjStream.close();
+                        outStream.flush();
+                        outStream.close();
+
+                        savedOk = true;
+                        System.out.println(title + "....saved message context.....");
+
+                        long filesize = theFile.length();
+                        System.out.println(title + "file size after save ["+filesize+"]   temp file = ["+theFilename+"]");
+
+                    }
+                    catch (Exception ex2)
+                    {
+                        System.out.println(title + "error with saving message context = ["+ex2.getClass().getName()+" : "+ex2.getMessage()+"]");
+                        ex2.printStackTrace();
+                    }
+
+                    assertTrue(savedOk);
+
+                    // ---------------------------------------------------------
+                    // restore from the temporary file
+                    // ---------------------------------------------------------
+                    try
+                    {
+                        // setup an input stream to the file
+                        FileInputStream inStream = new FileInputStream(theFile);
+
+                        // attach a stream capable of reading objects from the 
+                        // stream connected to the file
+                        ObjectInputStream inObjStream = new ObjectInputStream(inStream);
+
+                        // try to restore the message context
+                        System.out.println(title + "restoring a message context.....");
+                        restoredOk = false;
+
+                        MessageContext msgContext2 = (MessageContext) inObjStream.readObject();
+                        inObjStream.close();
+                        inStream.close();
+
+                        msgContext2.activate(configurationContext);
+
+                        restoredOk = true;
+                        System.out.println(title + "....restored message context.....");
+
+                        // now put the restored message context in the global
+                        // variable for the test 
+                        restoredMessageContext = msgContext2;
+                    }
+                    catch (Exception ex2)
+                    {
+                        System.out.println(title + "error with restoring message context = ["+ex2.getClass().getName()+" : "+ex2.getMessage()+"]");
+                        ex2.printStackTrace();
+                        restoredMessageContext = null;
+                    }
+
+                    assertTrue(restoredOk);
+
+                    // if the save/restore of the message context succeeded,
+                    // then don't keep the temporary file around
+                    boolean removeTmpFile = savedOk && restoredOk;
+                    if (removeTmpFile)
+                    {
+                        try
+                        {
+                            theFile.delete();
+                        }
+                        catch (Exception e)
+                        {
+                            // just absorb it
+                        }
+                    }
+                }
+
+                return InvocationResponse.SUSPEND;
+
+            }
+            else
+            {
+                System.out.println(title + "executedHandlers.add("+handlerID+")");
+                executedHandlers.add(handlerID);
+            }
+
+            return InvocationResponse.CONTINUE;
+        }
+
+    }
+
+    public class TempHandler extends AbstractHandler
+    {
+        private Integer handlerID = null;
+        private int count = 0;
+        private int numberProperties = 3;
+        private String propertyKey = "Property";
+        private String propertyValue = "ServiceLevelSetting";
+
+        //-----------------------------------------------------------------
+        // constructors
+        //-----------------------------------------------------------------
+
+        public TempHandler()
+        {
+            this.handlerID = new Integer(-5);
+        }
+
+        public TempHandler(int index)
+        {
+            this.handlerID = new Integer(index);
+            init(new HandlerDescription(new String("handler" + index)));
+        }
+
+        public TempHandler(int index, int number)
+        {
+            this.handlerID = new Integer(index);
+            init(new HandlerDescription(new String("handler" + index)));
+            numberProperties = number;
+        }
+
+        //-----------------------------------------------------------------
+        // methods
+        //-----------------------------------------------------------------
+
+        public int getHandlerID()
+        {
+            if (handlerID != null)
+            {
+                return handlerID.intValue();
+            }
+
+            return -5;
+        }
+
+
+        public InvocationResponse invoke(MessageContext msgContext) throws AxisFault
+        {
+            String title = "TempHandler["+getHandlerID()+"]:invoke(): ";
+
+            // get the service context from the message context
+            ServiceContext serviceContext = msgContext.getServiceContext();
+
+            if (serviceContext == null)
+            {
+                // get the service context from the operation context
+                OperationContext operationContext = msgContext.getOperationContext();
+                serviceContext = operationContext.getServiceContext();
+            }
+
+            if (serviceContext != null)
+            {
+                for (int j=0; j<numberProperties; j++)
+                {
+                    count++;
+                    String key = new String(propertyKey +".ID["+getHandlerID()+"]."+count);
+                    String value = new String(propertyValue + "["+count+"]");
+                    serviceContext.setProperty(key,value);
+                }
+            }
+
+            System.out.println(title + "executedHandlers.add("+handlerID+")");
+            executedHandlers.add(handlerID);
+
+            return InvocationResponse.CONTINUE;
+        }
+
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org