messagecontextselfmanageddatatest.java

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

JAVA
1,580
字号
                    serializecallcount + "]";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            String storedTestData =
                    (String) _mc.getSelfManagedData(this.getClass(), Integer.toString(id));
            if (storedTestData == null) {
                log.debug(title + ":  No self managed data to serialize");
                return null;
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeUTF(storedTestData);
            oos.close();
            int baos_size = baos.size();
            baos.close();

            log.debug(title + ": saved self managed data string length [" +
                    storedTestData.length() + "]");
            log.debug(title +
                    ": saved self managed data byte array output stream (UTF) length [" +
                    baos_size + "]");
            return baos;
        }

        public int getDeserializecallcount() {
            return deserializecallcount;
        }

        public int getSerializecallcount() {
            return serializecallcount;
        }
    }


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

        public TempHandler03() {
            id = -1;
        }

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

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

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

        public Object getTestDataFromMessageContext(MessageContext _mc) {
            return _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 = "TempHandler03[id=" + id + "].invoke()";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

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

            // add the byte [] of data
            _mc.setSelfManagedData(this.getClass(), Integer.toString(id), testData03);

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

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

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

            invokecallcount++;

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

        public void deserializeSelfManagedData(ByteArrayInputStream data, MessageContext _mc)
                throws IOException {
            boolean isOK = true;

            deserializecallcount++;

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

            int expected = testData03.length;

            byte [] tmp = new byte [expected];

            boolean keepGoing = true;
            int index = 0;

            while (keepGoing) {
                int tmpdata = data.read();

                if (tmpdata != -1) {
                    Integer value = new Integer(tmpdata);
                    tmp[index] = value.byteValue();
                    index++;

                    if (index > expected) {
                        isOK = false;
                        assertTrue(isOK);
                    }
                } else {
                    keepGoing = false;
                }
            }

            isOK = isEquals(tmp, testData03);
            assertTrue(isOK);

            _mc.setSelfManagedData(this.getClass(), Integer.toString(id), tmp);
        }

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

        public ByteArrayOutputStream serializeSelfManagedData(MessageContext _mc)
                throws IOException {

            serializecallcount++;

            String desc = "TempHandler03[id=" + id + "].serializeSelfManagedData()   count [" +
                    serializecallcount + "]";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            byte [] tmp = (byte []) _mc.getSelfManagedData(this.getClass(), Integer.toString(id));

            if (tmp == null) {
                log.debug(title + ":  No self managed data to serialize");
                return null;
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            baos.write(tmp, 0, tmp.length);
            int baos_size = baos.size();
            baos.close();

            log.debug(title + ": saved self managed data byte [] length [" + tmp.length + "]");
            log.debug(title +
                    ": saved self managed data byte array output stream length [" + baos_size +
                    "]");
            return baos;
        }


        public int getDeserializecallcout() {
            return deserializecallcount;
        }

        public int getSerializecallcount() {
            return serializecallcount;
        }
    }


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


        public TempHandler04() {
            id = -1;
        }

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

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

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

        public Object getTestDataFromMessageContext(MessageContext _mc) {
            return _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 = "TempHandler04[id=" + id + "].invoke()";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

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

            // add the byte [] of data
            _mc.setSelfManagedData(this.getClass(), Integer.toString(id), testData04);

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

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

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

            invokecallcount++;

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

        public void deserializeSelfManagedData(ByteArrayInputStream data, MessageContext _mc)
                throws IOException {
            boolean isOK = true;

            deserializecallcount++;

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

            int expected = testData04.length;

            long [] tmp = new long [expected];

            ObjectInputStream ois = new ObjectInputStream(data);

            boolean keepGoing = true;
            int index = 0;

            int sizeWritten = ois.readInt();

            if (sizeWritten > 0) {
                while (keepGoing) {
                    try {
                        long tmpdata = ois.readLong();

                        tmp[index] = tmpdata;
                        index++;

                        if (index > expected) {
                            isOK = false;
                            assertTrue(isOK);
                        }
                    }
                    catch (Exception exc) {
                        keepGoing = false;
                    }
                }

                isOK = isEquals(tmp, testData04);
                assertTrue(isOK);

                _mc.setSelfManagedData(this.getClass(), Integer.toString(id), tmp);
            }

        }

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

        public ByteArrayOutputStream serializeSelfManagedData(MessageContext _mc)
                throws IOException {

            serializecallcount++;

            String desc = "TempHandler04[id=" + id + "].serializeSelfManagedData()   count [" +
                    serializecallcount + "]";
            String title = "MessageContextSelfManagedDataTest::" + desc;
            log.debug(title);

            long [] tmp = (long []) _mc.getSelfManagedData(this.getClass(), Integer.toString(id));

            if (tmp == null) {
                log.debug(title + ":  No self managed data to serialize");
                return null;
            }

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);

            int size = tmp.length;

            oos.writeInt(size);

            for (int i = 0; i < size; i++) {
                oos.writeLong(tmp[i]);
            }

            oos.close();
            int baos_size = baos.size();
            baos.close();

            log.debug(title + ": saved self managed data byte [] length [" + tmp.length + "]");
            log.debug(title +
                    ": saved self managed data byte array output stream length [" + baos_size +
                    "]");
            return baos;
        }


        public int getDeserializecallcount() {
            return deserializecallcount;
        }

        public int getSerializecallcount() {
            return serializecallcount;
        }
    }


    /*
     * compares the two byte arrays to see if they are equal
     */
    private boolean isEquals(byte [] b1, byte [] b2) {
        int size1 = b1.length;
        int size2 = b2.length;

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

        for (int i = 0; i < size1; i++) {
            if (b1[i] != b2[i]) {
                return false;
            }
        }

        return true;
    }

    /*
     * compares the two long arrays to see if they are equal
     */
    private boolean isEquals(long [] L1, long [] L2) {
        int size1 = L1.length;
        int size2 = L2.length;

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

        for (int i = 0; i < size1; i++) {
            if (L1[i] != L2[i]) {
                return false;
            }
        }

        return true;
    }


}

⌨️ 快捷键说明

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