Package org.codehaus.xfire.handler

Source Code of org.codehaus.xfire.handler.HandlerPipelineTest$PauseHandler

package org.codehaus.xfire.handler;

/**
* @author Arjen Poutsma
*/

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

import junit.framework.TestCase;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.soap.handler.SoapBodyHandler;

public class HandlerPipelineTest
    extends TestCase
{
    private HandlerPipeline handlerPipeline;

    public void testPhases()
        throws Exception
    {
        List phases = new ArrayList();
        phases.add(new Phase(Phase.TRANSPORT, 100));
        phases.add(new Phase(Phase.PARSE, 100));
        phases.add(new Phase(Phase.PRE_DISPATCH, 100));
        phases.add(new Phase(Phase.DISPATCH, 500));
        phases.add(new Phase(Phase.USER, 500));

        handlerPipeline = new HandlerPipeline(phases);

        PhaseHandler handler1 = new PhaseHandler(Phase.TRANSPORT);
        PhaseHandler handler2 = new PhaseHandler(Phase.PARSE);
        handlerPipeline.addHandler(handler1);
        handlerPipeline.addHandler(handler2);

        handlerPipeline.invoke(new MessageContext());

        assertTrue(handler1.isInvoked());
        assertTrue(handler2.isInvoked());
    }

    public void testPauseResume()
        throws Exception
    {
        List phases = new ArrayList();
        phases.add(new Phase(Phase.TRANSPORT, 100));
        phases.add(new Phase(Phase.PARSE, 100));
        phases.add(new Phase(Phase.PRE_DISPATCH, 100));
        phases.add(new Phase(Phase.DISPATCH, 500));
        phases.add(new Phase(Phase.USER, 500));

        MessageContext context = new MessageContext();
        handlerPipeline = new HandlerPipeline(phases);
       
        PauseHandler handler1 = new PauseHandler(Phase.TRANSPORT);
        PhaseHandler handler2 = new PhaseHandler(Phase.PARSE);
        handlerPipeline.addHandler(handler1);
        handlerPipeline.addHandler(handler2);
        context.setInPipeline(handlerPipeline);
       
        handlerPipeline.invoke(context);
        Stack invoked = (Stack) context.getProperty(handlerPipeline.toString());
       
        assertTrue(handler1.isInvoked());
        assertTrue(invoked.contains(handler1));
        assertFalse(handler2.isInvoked());
        assertFalse(invoked.contains(handler2));
       
        context.getCurrentPipeline().resume(context);
       
        assertTrue(handler1.isInvoked());
        assertTrue(invoked.contains(handler1));
        assertTrue(handler2.isInvoked());
        assertTrue(invoked.contains(handler2));
    }

    public void testSorting()
        throws Exception
    {
        List phases = new ArrayList();
        phases.add(new Phase(Phase.TRANSPORT, 100));

        handlerPipeline = new HandlerPipeline(phases);

        PhaseHandler handler1 = new PhaseHandler(Phase.TRANSPORT);
        PhaseHandler2 handler2 = new PhaseHandler2(Phase.TRANSPORT);
        handler2.before(handler1.getClass().getName());

        handlerPipeline.addHandler(handler1);
        handlerPipeline.addHandler(handler2);

        List handlers = handlerPipeline.getPhaseHandlers(Phase.TRANSPORT).getHandlers();

        assertTrue(handlers.get(0) == handler2);
        assertTrue(handlers.get(1) == handler1);

        // try inserting in reverse
        handlerPipeline = new HandlerPipeline(phases);
        handlerPipeline.addHandler(handler2);
        handlerPipeline.addHandler(handler1);

        handlers = handlerPipeline.getPhaseHandlers(Phase.TRANSPORT).getHandlers();

        assertTrue(handlers.get(0) == handler2);
        assertTrue(handlers.get(1) == handler1);

        // try reverse ordering
        handlerPipeline = new HandlerPipeline(phases);

        handler1 = new PhaseHandler(Phase.TRANSPORT);
        handler2 = new PhaseHandler2(Phase.TRANSPORT);
        handler2.after(handler1.getClass().getName());

        handlerPipeline.addHandler(handler1);
        handlerPipeline.addHandler(handler2);

        handlers = handlerPipeline.getPhaseHandlers(Phase.TRANSPORT).getHandlers();

        assertTrue(handlers.get(0) == handler1);
        assertTrue(handlers.get(1) == handler2);
    }

    public void testAdvancedSorting()
    {
        List phases = new ArrayList();
        phases.add(new Phase(Phase.TRANSPORT, 100));
        phases.add(new Phase(Phase.PARSE, 100));
        phases.add(new Phase(Phase.PRE_DISPATCH, 100));
        phases.add(new Phase(Phase.DISPATCH, 500));
        phases.add(new Phase(Phase.USER, 500));

        handlerPipeline = new HandlerPipeline(phases);

        handlerPipeline.addHandler(new DispatchServiceHandler());
        handlerPipeline.addHandler(new LocateBindingHandler());
        handlerPipeline.addHandler(new SoapBodyHandler());

        List handlers = handlerPipeline.getPhaseHandlers(Phase.DISPATCH).getHandlers();

        assertTrue(handlers.get(0) instanceof LocateBindingHandler);
        assertTrue(handlers.get(1) instanceof SoapBodyHandler);
    }

    public void testInvalidSorting()
        throws Exception
    {
        List phases = new ArrayList();
        phases.add(new Phase(Phase.TRANSPORT, 100));

        handlerPipeline = new HandlerPipeline(phases);

        PhaseHandler handler1 = new PhaseHandler(Phase.TRANSPORT);
        PhaseHandler2 handler2 = new PhaseHandler2(Phase.TRANSPORT);
        handler1.before(handler2.getClass().getName());
        handler2.before(handler1.getClass().getName());

        handlerPipeline.addHandler(handler1);

        try
        {
            handlerPipeline.addHandler(handler2);
            fail("Invalid sort!");
        }
        catch (IllegalStateException e)
        {
        }

        handlerPipeline = new HandlerPipeline(phases);

        handler1 = new PhaseHandler(Phase.TRANSPORT);
        handler2 = new PhaseHandler2(Phase.TRANSPORT);
        handler1.after(handler2.getClass().getName());
        handler2.after(handler1.getClass().getName());

        handlerPipeline.addHandler(handler1);

        try
        {
            handlerPipeline.addHandler(handler2);
            fail("Invalid sort!");
        }
        catch (IllegalStateException e)
        {
        }
    }

    public class PhaseHandler
        extends AbstractHandler
    {
        private boolean invoked = false;

        public PhaseHandler(String phase)
        {
            super();
            setPhase(phase);
        }

        public void invoke(MessageContext context)
            throws Exception
        {
            invoked = true;
        }

        public boolean isInvoked()
        {
            return invoked;
        }

    }

    public class PhaseHandler2
        extends AbstractHandler
    {
        private boolean invoked = false;

        public PhaseHandler2(String phase)
        {
            super();
            setPhase(phase);
        }

        public void invoke(MessageContext context)
            throws Exception
        {
            invoked = true;
        }

        public boolean isInvoked()
        {
            return invoked;
        }

    }

    public class PauseHandler
        extends AbstractHandler
    {
        private boolean invoked = false;

        public PauseHandler(String phase)
        {
            super();
            setPhase(phase);
        }

        public void invoke(MessageContext context)
            throws Exception
        {
            context.getCurrentPipeline().pause();
            invoked = true;
        }

        public boolean isInvoked()
        {
            return invoked;
        }

    }
}
TOP

Related Classes of org.codehaus.xfire.handler.HandlerPipelineTest$PauseHandler

TOP
Copyright © 2018 www.massapi.com. 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.