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