messageproperties.java

来自「OpenJMS是一个开源的Java Message Service API 1.」· Java 代码 · 共 320 行

JAVA
320
字号
/** * Redistribution and use of this software and associated documentation * ("Software"), with or without modification, are permitted provided * that the following conditions are met: * * 1. Redistributions of source code must retain copyright *    statements and notices.  Redistributions must also contain a *    copy of this document. * * 2. Redistributions in binary form must reproduce the *    above copyright notice, this list of conditions and the *    following disclaimer in the documentation and/or other *    materials provided with the distribution. * * 3. The name "Exolab" must not be used to endorse or promote *    products derived from this Software without prior written *    permission of Exoffice Technologies.  For written permission, *    please contact info@exolab.org. * * 4. Products derived from this Software may not be called "Exolab" *    nor may "Exolab" appear in their names without prior written *    permission of Exoffice Technologies. Exolab is a registered *    trademark of Exoffice Technologies. * * 5. Due credit should be given to the Exolab Project *    (http://www.exolab.org/). * * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * Copyright 2000-2003 (C) Exoffice Technologies Inc. All Rights Reserved. * * $Id: MessageProperties.java,v 1.1 2004/11/26 01:50:43 tanderson Exp $ * * Date         Author  Changes * 02/26/2000   jimm    Created */package org.exolab.jms.message;import java.io.Externalizable;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectOutput;import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import javax.jms.JMSException;import javax.jms.MessageFormatException;/** * This class provides properties for messages * * @version     $Revision: 1.1 $ $Date: 2004/11/26 01:50:43 $ * @author      <a href="mailto:mourikis@intalio.com">Jim Mourikis</a> * @author      <a href="mailto:tima@intalio.com">Tim Anderson</a> */class MessageProperties implements Cloneable, Externalizable {    /**     * The map containing of properties     */    private HashMap _properties = new HashMap(20);    /**     * Object version no. for serialization     */    static final long serialVersionUID = 1;    /**     * Illegal names     */    private static final String[] RESERVED_WORDS = {        "and", "between", "escape", "in", "is", "like", "false", "null", "or",        "not", "true"};    private static final String GROUP_ID = "JMSXGroupID";    private static final String GROUP_SEQ = "JMSXGroupSeq";    /**     * Recognized provider property names that may be set by clients, and     * their expected types     */    private static final Object[][] JMSX_CLIENT_NAMES = {        {GROUP_ID, String.class},        {GROUP_SEQ, Integer.class}};    /**     * Default constructor to support externalization     */    public MessageProperties() {    }    /**     * Clone an instance of this object     *     * @return a copy of this object     * @throws CloneNotSupportedException if object or attributes not cloneable     */    public Object clone() throws CloneNotSupportedException {        MessageProperties result = new MessageProperties();        result._properties = (HashMap) _properties.clone();        return result;    }    /**     * Handle serialization.     * Just serialize the whole thing for this release.     *     * @param out the stream to write the object to     * @throws IOException if the object cannot be written     */    public void writeExternal(ObjectOutput out) throws IOException {        out.writeLong(serialVersionUID);        out.writeObject(_properties);    }    /**     * Read in the serialized object and assign all values from the stream.     * Ensure the version is one that is currently supported.     *     * @param in the input stream     * @throws IOException if an I/O error occurs     * @throws ClassNotFoundException if the class for an object being     * restored cannot be found.     */    public void readExternal(ObjectInput in)        throws IOException, ClassNotFoundException {        long version = in.readLong();        if (version == serialVersionUID) {            _properties = (HashMap) in.readObject();        } else {            throw new IOException("Incorrect version enountered: " +                version + " This version = " +                serialVersionUID);        }    }    /**     * Clear out all existing properties.     */    public void clearProperties() {        _properties.clear();    }    public boolean propertyExists(String name) {        return _properties.containsKey(name);    }    public boolean getBooleanProperty(String name) throws JMSException {        return FormatConverter.getBoolean(_properties.get(name));    }    public byte getByteProperty(String name) throws JMSException {        return FormatConverter.getByte(_properties.get(name));    }    public short getShortProperty(String name) throws JMSException {        return FormatConverter.getShort(_properties.get(name));    }    public int getIntProperty(String name) throws JMSException {        return FormatConverter.getInt(_properties.get(name));    }    public long getLongProperty(String name) throws JMSException {        return FormatConverter.getLong(_properties.get(name));    }    public float getFloatProperty(String name) throws JMSException {        return FormatConverter.getFloat(_properties.get(name));    }    public double getDoubleProperty(String name) throws JMSException {        return FormatConverter.getDouble(_properties.get(name));    }    public String getStringProperty(String name) throws JMSException {        return FormatConverter.getString(_properties.get(name));    }    public Object getObjectProperty(String name) throws JMSException {        return _properties.get(name);    }    public Enumeration getPropertyNames() {        return Collections.enumeration(_properties.keySet());    }    public void setBooleanProperty(String name, boolean value)        throws JMSException {        setProperty(name, new Boolean(value));    }    public void setByteProperty(String name, byte value) throws JMSException {        setProperty(name, new Byte(value));    }    public void setShortProperty(String name, short value)        throws JMSException {        setProperty(name, new Short(value));    }    public void setIntProperty(String name, int value) throws JMSException {        setProperty(name, new Integer(value));    }    public void setLongProperty(String name, long value) throws JMSException {        setProperty(name, new Long(value));    }    public void setFloatProperty(String name, float value)        throws JMSException {        setProperty(name, new Float(value));    }    public void setDoubleProperty(String name, double value)        throws JMSException {        setProperty(name, new Double(value));    }    public void setStringProperty(String name, String value)        throws JMSException {        setProperty(name, value);    }    public void setObjectProperty(String name, Object value)        throws JMSException {        if (value instanceof Boolean || value instanceof Byte ||            value instanceof Short || value instanceof Integer ||            value instanceof Long || value instanceof Float ||            value instanceof Double || value instanceof String ||            (value == null)) {            setProperty(name, value);        } else {            throw new MessageFormatException(                "Message.setObjectProperty() does not support objects of " +                "type=" + value.getClass().getName());        }    }    public void setJMSXRcvTimestamp(long value) {        _properties.put("JMSXRcvTimestamp", new Long(value));    }    protected void setProperty(String name, Object value) throws JMSException {        if (name == null) {            throw new JMSException("<null> is not a valid property name");        }        char[] chars = name.toCharArray();        if (chars.length == 0) {            throw new JMSException("zero-length name is not a valid " +                "property name");        }        if (!Character.isJavaIdentifierStart(chars[0])) {            throw new JMSException("name=" + name + " is not a valid " +                "property name");        }        for (int i = 1; i < chars.length; ++i) {            if (!Character.isJavaIdentifierPart(chars[i])) {                throw new JMSException("name=" + name + " is not a valid " +                    "property name");            }        }        for (int i = 0; i < RESERVED_WORDS.length; ++i) {            if (name.equalsIgnoreCase(RESERVED_WORDS[i])) {                throw new JMSException("name=" + name + " is a reserved " +                    "word; it cannot be used as a " +                    "property name");            }        }        if (name.startsWith("JMSX")) {            boolean found = false;            for (int i = 0; i < JMSX_CLIENT_NAMES.length; ++i) {                Object[] types = JMSX_CLIENT_NAMES[i];                if (types[0].equals(name)) {                    if (value == null) {                        throw new MessageFormatException("Property=" + name +                            " may not be null");                    }                    Class type = (Class) types[1];                    if (!type.equals(value.getClass())) {                        throw new MessageFormatException(                            "Expected type=" + type.getName() +                            " for property=" + name + ", but got type=" +                            value.getClass().getName());                    }                    if (name.equals(GROUP_SEQ) &&                        ((Integer) value).intValue() <= 0) {                        throw new JMSException(                            GROUP_SEQ + " must have a value > 0");                    }                    found = true;                    break;                }            }            if (!found) {                throw new JMSException("Property=" + name +                    " cannot be set by clients");            }        }        _properties.put(name, value);    }} //-- MessageProperties

⌨️ 快捷键说明

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