messagecontextselfmanageddatatest.java

来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,580 行 · 第 1/4 页

JAVA
1,580
字号
                restoredMessageContext = true;

                // VERY IMPORTANT: replace testcase's messagecontext object with the new restored one
                mc = msgContext2;

                log.debug(title + "....restored message context .....");

            }
            catch (Exception ex2) {
                if (savedMessageContext != true) {
                    log.debug(title + "Error with saving message context = [" +
                            ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
                    ex2.printStackTrace();
                } else {
                    log.debug(title + "Error with restoring message context = [" +
                            ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
                    ex2.printStackTrace();
                }
            }

            // if the save/restore of the message context succeeded,
            // then don't keep the temporary file around
            boolean removeTmpFile = savedMessageContext && restoredMessageContext;
            if (removeTmpFile) {
                try {
                    theFile.delete();
                }
                catch (Exception e) {
                    // just absorb it
                }
            }
        }

        return msgContext2;
    }


    /**
     * 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 TempHandler01) {
            id = ((TempHandler01) o).getID();
        } else if (o instanceof TempHandler02) {
            id = ((TempHandler02) o).getID();
        } else if (o instanceof TempHandler03) {
            id = ((TempHandler03) o).getID();
        } else if (o instanceof TempHandler04) {
            id = ((TempHandler04) o).getID();
        }

        return id;
    }


    /**
     * Check the handler objects to see if they are equivalent.
     *
     * @param o1 The first handler
     * @param o2 The second handler
     * @return TRUE if the handler objects are equivalent,
     *         FALSE otherwise
     */
    private boolean compareHandlers(Object o1, Object o2) {
        if ((o1 == null) && (o2 == null)) {
            return true;
        }

        if ((o1 != null) && (o2 != null)) {
            String c1 = o1.getClass().getName();
            String c2 = o2.getClass().getName();

            if (c1.equals(c2)) {
                log.debug("MessagecontextSelfManagedDataTest::compareHandlers:  class [" +
                        c1 + "] match ");

                int id1 = getHandlerID(o1);
                int id2 = getHandlerID(o2);

                if (id1 == id2) {
                    log.debug("MessagecontextSelfManagedDataTest::compareHandlers:  id [" +
                            id1 + "] match");
                    return true;
                } else {
                    log.debug("MessagecontextSelfManagedDataTest::compareHandlers:  id1 [" + id1 +
                            "] != id2 [" + id2 + "] ");
                    return false;
                }
            } else {
                log.debug("MessagecontextSelfManagedDataTest::compareHandlers:  class1 [" +
                        c1 + "] != class2 [" + c2 + "]   ");
                return false;
            }
        }

        return false;
    }


    /**
     * Compare two phases.
     *
     * @param o1 The first phase object
     * @param o2 The second phase object
     * @return TRUE if the phases are equivalent,
     *         FALSE otherwise
     */
    private boolean comparePhases(Object o1, Object o2) {
        if ((o1 == null) && (o2 == null)) {
            return true;
        }

        try {
            if (((o1 != null) && (o2 != null))
                    && ((o1 instanceof Phase) && (o2 instanceof Phase))
                    ) {
                Phase p1 = (Phase) o1;
                Phase p2 = (Phase) o2;

                ArrayList list1 = p1.getHandlers();
                ArrayList list2 = p2.getHandlers();

                if ((list1 == null) && (list2 == null)) {
                    return true;
                }

                if ((list1 != null) && (list2 != null)) {
                    int size1 = list1.size();
                    int size2 = list2.size();

                    if (size1 != size2) {
                        return false;
                    }

                    for (int j = 0; j < size1; j++) {
                        Object obj1 = list1.get(j);
                        Object obj2 = list2.get(j);

                        if ((obj1 == null) && (obj2 == null)) {
                            // ok
                        } else if ((obj1 != null) && (obj2 != null)) {
                            boolean check = false;

                            if (obj1 instanceof Phase) {
                                check = comparePhases(obj1, obj2);
                            } else {
                                // must be a handler
                                check = compareHandlers(obj1, obj2);
                            }

                            if (check == false) {
                                return false;
                            }
                        } else {
                            // mismatch
                            return false;
                        }
                    }

                    // if we got here, the comparison completed ok
                    // with a match

                    return true;
                }

            }
        }
        catch (Exception e) {
            // some error
            e.printStackTrace();
        }

        return false;
    }

/*
    private void comparePhases(Iterator it, ArrayList al)
    {
        int it_count = -1;

        while (it.hasNext())
        {
            it_count++;
            Handler handler = (Handler)it.next();
            if (handler instanceof Phase)
            {
                comparePhases(((Phase)handler).getHandlers().iterator(), ((Phase)al.get(it_count)).getHandlers());
            }
            else
            {
                assertEquals(handler, (TempHandler02)al.get(it_count));
            }
        }
    }

*/

    //-------------------------------------------------------------------------
    // internal handlers
    //-------------------------------------------------------------------------


    /*
     * TempHandler01 simply sets and/or removes data from the MessageContext
     * object.
     */
    public class TempHandler01 extends AbstractHandler {
        private int id = -2;

        public TempHandler01() {
            id = -1;
        }

        public TempHandler01(int id) {
            this.id = id;
        }

        public int getID() {
            return this.id;
        }

        public String getName() {
            return new String(Integer.toString(id));
        }

        public String getTestData01FromMessageContext(MessageContext _mc) {
            return (String) _mc.getSelfManagedData(this.getClass(), key01);
        }

        public String getTestData02FromMessageContext(MessageContext _mc) {
            return (String) _mc.getSelfManagedData(this.getClass(), key02);
        }

        public byte [] getTestData03FromMessageContext(MessageContext _mc) {
            return (byte []) _mc.getSelfManagedData(this.getClass(), key03);
        }

        public long [] getTestData04FromMessageContext(MessageContext _mc) {
            return (long []) _mc.getSelfManagedData(this.getClass(), key04);
        }

        /* we're just using the invoke to set/change/remove data
         * Tests:
         * for key01:  set, remove, set, get
         * for key02:  set, get, set
         * for key03:  set, remove, set, get
         * for key04:  set, get, set, get
         */
        public InvocationResponse invoke(MessageContext _mc) throws AxisFault {

            String desc = "TempHandler01[id=" + id + "].invoke()";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            String tmp = "whaaa?";
            _mc.setSelfManagedData(this.getClass(), key02, tmp);
            String data2 = (String) _mc.getSelfManagedData(this.getClass(), key02);
            assertEquals(tmp, data2);

            _mc.setSelfManagedData(this.getClass(), key01, testData01);
            _mc.removeSelfManagedData(this.getClass(), key01);
            _mc.setSelfManagedData(this.getClass(), key01, testData01);
            String data1 = (String) _mc.getSelfManagedData(this.getClass(), key01);
            assertEquals(data1, testData01);

            _mc.setSelfManagedData(this.getClass(), key02, testData02);

            _mc.setSelfManagedData(this.getClass(), key03, testData03);
            byte [] data3 = (byte []) _mc.getSelfManagedData(this.getClass(), key03);
            boolean isOk3 = isEquals(data3, testData03);
            assertTrue(isOk3);

            _mc.removeSelfManagedData(this.getClass(), key03);
            _mc.setSelfManagedData(this.getClass(), key03, testData03);

            _mc.setSelfManagedData(this.getClass(), key04, testData04);
            long [] data4 = (long []) _mc.getSelfManagedData(this.getClass(), key04);
            boolean isOk4 = isEquals(data4, testData04);
            assertTrue(isOk4);

            invokecallcount++;

            log.debug(title + ": Completed");
            return InvocationResponse.CONTINUE;
        }

    }


    /*
     * TempHandler02 sets data, saves it (via the serializeSelfManagedData method
     * called by the MessageContext object when saved in this handler's invoke()),
     * 
     */
    public class TempHandler02 extends AbstractHandler implements SelfManagedDataManager {
        private int id = -2;
        private int serializecallcount = 0;
        private int deserializecallcount = 0;
        public String testData = new String("this is some test data");

        /*
         * constructor
         */
        public TempHandler02() {
            this.id = -1;
            this.serializecallcount = 0;
            this.deserializecallcount = 0;
        }

        /*
         * constructor
         */
        public TempHandler02(int id) {
            this.id = id;
            this.serializecallcount = 0;
            this.deserializecallcount = 0;
        }

        public int getID() {
            return this.id;
        }

        public String getName() {
            return new String(Integer.toString(id));
        }

        public String getTestDataFromMessageContext(MessageContext _mc) {
            return (String) _mc.getSelfManagedData(this.getClass(), Integer.toString(id));
        }

        /*
         *  (non-Javadoc)
         * @see org.apache.axis2.engine.Handler#invoke(org.apache.axis2.context.MessageContext)
         * 
         * This invoke() method will test several things:
         * 1.  verify that serializeSelfManagedData is actually called when saving the MessageContext object
         * 2.  verify that deserializeSelfManagedData is actually called when restoring the MessageContext object
         * 3.  verify that any SelfManagedData stored in the MessageContext is properly saved/restored (via serializeSelfManagedData/deserializeSelfManagedData)
         */
        public InvocationResponse invoke(MessageContext _mc) throws AxisFault {
            String desc = "TempHandler02[id=" + id + "].invoke()";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            MessageContext msgContext2 = null;  // this will be the restored one

            _mc.setSelfManagedData(this.getClass(), Integer.toString(id),
                                   testData + Integer.toString(id));

            log.debug(title + ":   Setting self managed data using key [" +
                    Integer.toString(id) + "]");

            msgContext2 = saveAndRestore(_mc, "TempHandler02_", desc);

            boolean result = (msgContext2 != null);
            assertTrue(result);

            invokecallcount++;

            log.debug(title + ": Completed");
            return InvocationResponse.CONTINUE;
        }


        public void deserializeSelfManagedData(ByteArrayInputStream data, MessageContext _mc)
                throws IOException {
            deserializecallcount++;

            String desc = "TempHandler02[id=" + id + "].deserializeSelfManagedData()   count [" +
                    deserializecallcount + "]";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            ObjectInputStream ois = new ObjectInputStream(data);
            testData = ois.readUTF().concat(" with extra text " + Integer.toString(id));
            _mc.setSelfManagedData(this.getClass(), Integer.toString(id), testData);
        }


        public void restoreTransientData(MessageContext _mc) {
            // not necessary to test
        }


        public ByteArrayOutputStream serializeSelfManagedData(MessageContext _mc)
                throws IOException {
            serializecallcount++;

            String desc = "TempHandler02[id=" + id + "].serializeSelfManagedData()   count [" +

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?