use of com.rabbitmq.jms.util.RMQMessageFormatException in project rabbitmq-jms-client by rabbitmq.
the class RMQStreamMessage method readPrimitiveType.
private Object readPrimitiveType(Class<?> type) throws JMSException {
if (!this.reading)
throw new MessageNotReadableException(NOT_READABLE);
if (this.readbuf != null) {
throw new MessageFormatException("You must call 'int readBytes(byte[])' since the buffer is not empty");
}
boolean success = true;
try {
this.bin.mark(0);
Object o = RMQMessage.readPrimitive(in);
if (o instanceof byte[]) {
if (type == ByteArray.class || type == Object.class) {
return o;
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "byte[]"));
}
} else if (type == ByteArray.class) {
if (o == null) {
return null;
}
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "byte[]"));
} else if (type == Boolean.class) {
if (o == null) {
return Boolean.FALSE;
} else if (o instanceof Boolean) {
return o;
} else if (o instanceof String) {
return Boolean.parseBoolean((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "boolean"));
}
} else if (type == Byte.class) {
if (o instanceof Byte) {
return o;
} else if (o instanceof String) {
return Byte.parseByte((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "byte"));
}
} else if (type == Short.class) {
if (o instanceof Byte) {
return (short) (Byte) o;
} else if (o instanceof Short) {
return o;
} else if (o instanceof String) {
return Short.parseShort((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "byte"));
}
} else if (type == Integer.class) {
if (o instanceof Byte) {
return (int) (Byte) o;
} else if (o instanceof Short) {
return (int) (Short) o;
} else if (o instanceof Integer) {
return o;
} else if (o instanceof String) {
return Integer.parseInt((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "int"));
}
} else if (type == Character.class) {
if (o instanceof Character) {
return o;
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "char"));
}
} else if (type == Long.class) {
if (o instanceof Byte) {
return (long) (Byte) o;
} else if (o instanceof Short) {
return (long) (Short) o;
} else if (o instanceof Integer) {
return (long) (Integer) o;
} else if (o instanceof Long) {
return o;
} else if (o instanceof String) {
return Long.parseLong((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "long"));
}
} else if (type == Float.class) {
if (o instanceof Float) {
return (Float) o;
} else if (o instanceof String) {
return Float.parseFloat((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "float"));
}
} else if (type == Double.class) {
if (o instanceof Float) {
return (double) (Float) o;
} else if (o instanceof Double) {
return (Double) o;
} else if (o instanceof String) {
return Double.parseDouble((String) o);
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "double"));
}
} else if (type == String.class) {
if (o == null) {
return null;
} else if (o instanceof byte[]) {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, "String"));
} else {
return o.toString();
}
} else if (type == Object.class) {
return o;
} else {
throw new MessageFormatException(String.format(UNABLE_TO_CAST, o, type.toString()));
}
} catch (NumberFormatException x) {
success = false;
throw x;
} catch (ClassNotFoundException x) {
success = false;
throw new RMQJMSException(x);
} catch (EOFException x) {
success = false;
throw new MessageEOFException(MSG_EOF);
} catch (UTFDataFormatException x) {
success = false;
throw new RMQMessageFormatException(x);
} catch (IOException x) {
success = false;
throw new RMQJMSException(x);
} catch (Exception x) {
success = false;
if (x instanceof JMSException) {
throw (JMSException) x;
} else {
throw new RMQJMSException(x);
}
} finally {
if (!success) {
this.bin.reset();
}
}
}
use of com.rabbitmq.jms.util.RMQMessageFormatException in project rabbitmq-jms-client by rabbitmq.
the class RMQBytesMessage method readUTF.
/**
* {@inheritDoc}
*/
@Override
public String readUTF() throws JMSException {
if (!this.reading)
throw new MessageNotReadableException(NOT_READABLE);
int posOfUtfItem = this.pos;
// modifies pos if valid
int lenUtfBytes = readUnsignedShort();
// reset in case of failure
this.pos = posOfUtfItem;
int utfItemLen = Bits.NUM_BYTES_IN_SHORT + lenUtfBytes;
if (posOfUtfItem + utfItemLen > this.buf.length) {
throw new MessageFormatException("Not enough bytes in message body for UTF object");
}
byte[] utfBuf = new byte[utfItemLen];
System.arraycopy(this.buf, posOfUtfItem, utfBuf, 0, utfItemLen);
try {
String str = new DataInputStream(new ByteArrayInputStream(utfBuf)).readUTF();
this.pos += utfItemLen;
return str;
} catch (IOException ioe) {
throw new RMQMessageFormatException("UTF String invalid format", ioe);
}
}
Aggregations