Package org.apache.synapse

Examples of org.apache.synapse.MessageContext


            log.debug("Start Sending the Message ");
        }

        try {

            MessageContext messageOut = MessageHelper.cloneMessageContext(messageIn);
            Options options = new Options();
            options.setTo(new EndpointReference(serviceUrl));
            if(messageIn.getSoapAction() != null) {

                options.setAction(messageIn.getSoapAction());

            } else {

                if (messageIn.isSOAP11()) {
                    options.setProperty(Constants.Configuration.DISABLE_SOAP_ACTION, true);
                } else {
                    Axis2MessageContext axis2smc = (Axis2MessageContext) messageOut;
                    org.apache.axis2.context.MessageContext axis2MessageCtx =
                            axis2smc.getAxis2MessageContext();
                    axis2MessageCtx.getTransportOut().addParameter(
                            new Parameter(HTTPConstants.OMIT_SOAP_12_ACTION, true));
                }

            }

           //After setting all the options we need to find the MEP of the Message
           org.apache.axis2.context.MessageContext axis2Ctx =
                   ((Axis2MessageContext)messageOut).getAxis2MessageContext();

           boolean outOnlyMessage = "true".equals(messageIn.getProperty(
                SynapseConstants.OUT_ONLY)) || WSDL2Constants.MEP_URI_IN_ONLY.equals(
                axis2Ctx.getOperationContext()
                        .getAxisOperation().getMessageExchangePattern());

            // Here We consider all other Messages that evaluates to outOnlyMessage == false
            // follows out in mep.
            if(log.isDebugEnabled()) {
                log.debug("Invoking service Url " + serviceUrl + " with Message" +
                        messageIn.getMessageID());
            }





            options.setProperty(
                    AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);

            //clean existing headers
            // otherwise when retrying same header element will add multiple times
            sc.removeHeaders();

            axis2Ctx.getAttachmentMap();
            Iterator itr = axis2Ctx.getEnvelope().getHeader().getChildren();
            while (itr.hasNext()) {
                Object o =itr.next();
                if ( o instanceof OMElement ){
                    sc.addHeader((OMElement)o);
                }
            }

            sc.setOptions(options);
            OMElement result = null;
            try {
                OMElement payload = axis2Ctx.getEnvelope().getBody().getFirstElement();
                if(outOnlyMessage) {
                    sc.sendRobust(payload);
                } else {
                    result = sc.sendReceive(payload);
                }

            } catch (Exception axisFault) {

                // Here if Message is not a Out only Message
                // To indicate that it is a Error we set a new Message Context property
                // and return the message context
                // If its not we throw an Exception
                if (!outOnlyMessage) {
                    messageOut.setProperty(ForwardingProcessorConstants.BLOCKING_SENDER_ERROR,
                            "true");

                    return messageOut;
                }
View Full Code Here


     */
    public static MessageContext cloneMessageContext(MessageContext synCtx) throws AxisFault {

        // creates the new MessageContext and clone the internal axis2 MessageContext
        // inside the synapse message context and place that in the new one
        MessageContext newCtx = synCtx.getEnvironment().createMessageContext();
        Axis2MessageContext axis2MC = (Axis2MessageContext) newCtx;
        axis2MC.setAxis2MessageContext(
            cloneAxis2MessageContext(((Axis2MessageContext) synCtx).getAxis2MessageContext()));

        newCtx.setConfiguration(synCtx.getConfiguration());
        newCtx.setEnvironment(synCtx.getEnvironment());
        newCtx.setContextEntries(synCtx.getContextEntries());

        // set the parent correlation details to the cloned MC -
        //                              for the use of aggregation like tasks
        newCtx.setProperty(EIPConstants.AGGREGATE_CORRELATION, synCtx.getMessageID());

        // copying the core parameters of the synapse MC
        newCtx.setTo(synCtx.getTo());
        newCtx.setReplyTo(synCtx.getReplyTo());
        newCtx.setSoapAction(synCtx.getSoapAction());
        newCtx.setWSAAction(synCtx.getWSAAction());
        newCtx.setResponse(synCtx.isResponse());

        // copy all the synapse level properties to the newCtx
        for (Object o : synCtx.getPropertyKeySet()) {
            // If there are non String keyed properties neglect them rather than trow exception
            if (o instanceof String) {
                newCtx.setProperty((String) o, synCtx.getProperty((String) o));
            }
        }
       
        // Make deep copy of fault stack so that parent will not be lost it's fault stack
        Stack<FaultHandler> faultStack = synCtx.getFaultStack();
        if (!faultStack.isEmpty()) {
           
            List<FaultHandler> newFaultStack = new ArrayList<FaultHandler>();
            newFaultStack.addAll(faultStack);
           
            for (FaultHandler faultHandler : newFaultStack) {
                if (faultHandler != null) {
                    newCtx.pushFaultHandler(faultHandler);
                }
            }
        }

        if (log.isDebugEnabled()) {
            log.info("Parent's Fault Stack : " + faultStack
                    + " : Child's Fault Stack :" + newCtx.getFaultStack());
        }
       
        return newCtx;
    }
View Full Code Here

    public void testDynamicSequenceLookup() throws Exception {
        System.out.println("Testing dynamic sequence lookup...");

        // Phase 1
        System.out.println("Testing basic registry lookup functionality...");
        MessageContext synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
        Mediator seq1 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
        assertNotNull(seq1);
        assertTrue(((SequenceMediator) seq1).isInitialized());
        assertEquals(1, registry.getHitCount());
        seq1.mediate(synCtx);
        assertEquals("bar", synCtx.getProperty("foo"));

        // Phase 2
        System.out.println("Testing basic sequence caching...");
        synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
        Mediator seq2 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
        assertNotNull(seq2);
        assertTrue(((SequenceMediator) seq2).isInitialized());
        assertEquals(1, registry.getHitCount());
        seq2.mediate(synCtx);
        assertEquals("bar", synCtx.getProperty("foo"));
        assertTrue(seq1 == seq2);

        // Phase 3
        System.out.println("Testing advanced sequence caching...");
        synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
        System.out.println("Waiting for the cache to expire...");
        Thread.sleep(8500L);
        Mediator seq3 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
        assertNotNull(seq3);
        assertTrue(((SequenceMediator) seq3).isInitialized());
        assertEquals(1, registry.getHitCount());
        seq3.mediate(synCtx);
        assertEquals("bar", synCtx.getProperty("foo"));
        assertTrue(seq1 == seq3);

        // Phase 4
        System.out.println("Testing sequence reloading...");
        registry.updateResource(KEY_DYNAMIC_SEQUENCE_1, TestUtils.createOMElement(DYNAMIC_SEQUENCE_2));
        System.out.println("Waiting for the cache to expire...");
        Thread.sleep(8500L);
        synCtx = TestUtils.createLightweightSynapseMessageContext("<empty/>", config);
        Mediator seq4 = synCtx.getSequence(KEY_DYNAMIC_SEQUENCE_1);
        assertNotNull(seq4);
        assertTrue(((SequenceMediator) seq4).isInitialized());
        assertEquals(2, registry.getHitCount());
        seq4.mediate(synCtx);
        assertEquals("baz", synCtx.getProperty("foo"));
        assertTrue(seq1 != seq4);
        assertTrue(!((SequenceMediator) seq1).isInitialized());

        // Phase 5
        System.out.println("Testing for non-existing sequences...");
        synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        Mediator seq5 = synCtx.getSequence("non-existing-sequence");
        assertNull(seq5);

        System.out.println("Dynamic sequence lookup tests were successful...");
    }
View Full Code Here

    public void testDynamicEndpointLookup() throws Exception {
        System.out.println("Testing dynamic endpoint lookup...");

        // Phase 1
        System.out.println("Testing basic registry lookup functionality...");
        MessageContext synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        Endpoint ep1 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
        assertNotNull(ep1);
        assertTrue(ep1.isInitialized());
        assertEquals(1, registry.getHitCount());
        assertEquals("http://test.url", ((AddressEndpoint) ep1).getDefinition().getAddress());

        // Phase 2
        System.out.println("Testing basic endpoint caching...");
        synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        Endpoint ep2 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
        assertNotNull(ep2);
        assertEquals(1, registry.getHitCount());
        assertTrue(ep1 == ep2);

        // Phase 3
        System.out.println("Testing advanced endpoint caching...");
        synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        System.out.println("Waiting for the cache to expire...");
        Thread.sleep(8500L);
        Endpoint ep3 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
        assertNotNull(ep3);
        assertEquals(1, registry.getHitCount());
        assertTrue(ep1 == ep3);

        // Phase 4
        System.out.println("Testing endpoint reloading...");
        registry.updateResource(KEY_DYNAMIC_ENDPOINT_1, TestUtils.createOMElement(DYNAMIC_ENDPOINT_2));
        System.out.println("Waiting for the cache to expire...");
        Thread.sleep(8500L);
        synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        Endpoint ep4 = synCtx.getEndpoint(KEY_DYNAMIC_ENDPOINT_1);
        assertNotNull(ep4);
        assertTrue(ep4.isInitialized());
        assertEquals(2, registry.getHitCount());
        assertEquals("http://test2.url", ((AddressEndpoint) ep4).getDefinition().getAddress());
        assertTrue(ep1 != ep4);
        assertTrue(!ep1.isInitialized());

        // Phase 5
        System.out.println("Testing for non-existing endpoints...");
        synCtx = TestUtils.createSynapseMessageContext("<empty/>", config);
        Endpoint ep5 = synCtx.getEndpoint("non-existing-endpoint");
        assertNull(ep5);

        System.out.println("Dynamic endpoint lookup tests were successful...");
    }
View Full Code Here

        assertEquals(0, algorithm.getEndpointCursor());
        assertEquals(2, algorithm.getRoundsPerRecalculation());
    }

    public void testNextEndpoint() {
        MessageContext messageContext = createMessageContext();
        LoadbalanceEndpoint endpoint = createLoadBalanceEndpoint();

        String []firstTwoRoundsExpected = {
                "6", "6", "6", "6", "6", "6", "5", "5", "5", "5", "5", "3", "3", "3", "2", "2", "1",
                "6", "6", "6", "6", "6", "6", "5", "5", "5", "5", "5", "3", "3", "3", "2", "2", "1"};
View Full Code Here

    private MessageContext createMessageContext() {
        org.apache.axis2.context.MessageContext axisMessageContext =
                new org.apache.axis2.context.MessageContext();

        MessageContext synapseMessageContext =
                new Axis2MessageContext(axisMessageContext, null, null);

        axisMessageContext.setProperty("OPEN_CONNNECTIONS_MAP", createMap());

        return synapseMessageContext;
View Full Code Here

    private String threadsafetyscript = "var rno = mc.getPayloadXML().toString(); rno=rno*2; mc.setPayloadXML" +
            "(<randomNo>{rno}</randomNo>)";

    public void testInlineMediator() throws Exception {
        MessageContext mc = TestUtils.getTestContext("<foo/>", null);
        ScriptMediator mediator = new ScriptMediator("js", inlinescript);
        assertTrue(mediator.mediate(mc));
    }
View Full Code Here

        ScriptMediator mediator = new ScriptMediator("js", inlinescript);
        assertTrue(mediator.mediate(mc));
    }

    public void testThreadSafety() throws Exception {
        MessageContext mc = TestUtils.getTestContext("<randomNo/>", null);
        Random rand = new Random();
        String randomno = Integer.toString(rand.nextInt(200));
        mc.getEnvelope().getBody().getFirstElement().setText(randomno);
        ScriptMediator mediator = new ScriptMediator("js", threadsafetyscript);
        mediator.mediate(mc);
        assertEquals(Integer.parseInt(mc.getEnvelope().getBody().getFirstElement().getText()),
                Integer.parseInt(randomno) * 2);
    }
View Full Code Here

                            !storableMessage.getEndpoint().readyToSend()) {
                        continue;
                    }

                    messageStore.dequeueScheduledQueue();
                    MessageContext synCtx = storableMessage.getMessageContext();

                    if (synCtx.getProperty(
                            SynapseConstants.MESSAGE_STORE_REDELIVERY_COUNT) == null) {
                        synCtx.setProperty(SynapseConstants.MESSAGE_STORE_REDELIVERY_COUNT, "1");
                        delay = redeliveryDelay;

                    } else {
                        String redeliveryCountStr = (String) synCtx.getProperty(
                                SynapseConstants.MESSAGE_STORE_REDELIVERY_COUNT);
                        int redeliveryCount = Integer.parseInt(redeliveryCountStr);

                        if (redeliveryCount >= maxRedeleveries) {
                            if (log.isDebugEnabled()) {
                                log.debug("Maximum number of redelivery attempts has exceeded " +
                                        "for the message: " + synCtx.getMessageID() + " - " +
                                        "Message will be put back to the message store.");
                            }
                            messageStore.store(storableMessage);
                            continue;
                        }

                        synCtx.setProperty(SynapseConstants.MESSAGE_STORE_REDELIVERY_COUNT, "" +
                                (redeliveryCount + 1));
                        if (maxRedeleveries <= (redeliveryCount + 1)) {
                            synCtx.setProperty(SynapseConstants.MESSAGE_STORE_REDELIVERED, "true");
                        }

                        if (exponentialBackoff && backOffMultiplier == -1) {
                            delay = (redeliveryCount + 1) * redeliveryDelay;
                        } else if (exponentialBackoff) {
                            delay = (int) Math.pow(backOffMultiplier, redeliveryCount) * redeliveryDelay;
                        }
                    }

                    try {
                        messageStore.wait(delay);
                    } catch (InterruptedException ignored) {

                    }

                    synCtx.pushFaultHandler((FaultHandler) storableMessage.getEndpoint());
                    storableMessage.getEndpoint().send(storableMessage.getMessageContext());

                    if (log.isDebugEnabled()) {
                        log.debug("Sent: " + storableMessage.getMessageContext().getEnvelope());
                    }
View Full Code Here

    private static final Log log = LogFactory.getLog(SynapseMessageReceiver.class);
    private static final Log trace = LogFactory.getLog(SynapseConstants.TRACE_LOGGER);

    public void receive(org.apache.axis2.context.MessageContext mc) throws AxisFault {

        MessageContext synCtx = MessageContextCreatorForAxis2.getSynapseMessageContext(mc);

        StatisticsReporter.reportForComponent(synCtx,
                AspectConfigurationDetectionStrategy.getAspectConfiguration(synCtx),
                ComponentType.PROXYSERVICE);

        boolean traceOn = synCtx.getMainSequence().getTraceState() == SynapseConstants.TRACING_ON;
        boolean traceOrDebugOn = traceOn || log.isDebugEnabled();

        if (traceOrDebugOn) {
            traceOrDebug(traceOn, "Synapse received a new message for message mediation...");
            traceOrDebug(traceOn, "Received To: " +
                (mc.getTo() != null ? mc.getTo().getAddress() : "null"));
            traceOrDebug(traceOn, "SOAPAction: " +
                (mc.getSoapAction() != null ? mc.getSoapAction() : "null"));
            traceOrDebug(traceOn, "WSA-Action: " +
                (mc.getWSAAction() != null ? mc.getWSAAction() : "null"));

            if (traceOn && trace.isTraceEnabled()) {
                String[] cids = mc.getAttachmentMap().getAllContentIDs();
                if (cids != null && cids.length > 0) {
                    for (String cid : cids) {
                        trace.trace("Attachment : " + cid);
                    }
                }
                trace.trace("Envelope : " + mc.getEnvelope());
            }
        }

        // get service log for this message and attach to the message context
        Log serviceLog = LogFactory.getLog(SynapseConstants.SERVICE_LOGGER_PREFIX +
            SynapseConstants.SYNAPSE_SERVICE_NAME);
        ((Axis2MessageContext) synCtx).setServiceLog(serviceLog);

        try {
            // set default fault handler
            synCtx.pushFaultHandler(new MediatorFaultHandler(synCtx.getFaultSequence()));

            // invoke synapse message mediation through the main sequence
            synCtx.getEnvironment().injectMessage(synCtx);

        } catch (SynapseException syne) {

            if (!synCtx.getFaultStack().isEmpty()) {
                warn(traceOn, "Executing fault handler due to exception encountered", synCtx);
                ((FaultHandler) synCtx.getFaultStack().pop()).handleFault(synCtx, syne);

            } else {
                warn(traceOn, "Exception encountered but no fault handler found - " +
                    "message dropped", synCtx);
            }
View Full Code Here

TOP

Related Classes of org.apache.synapse.MessageContext

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.