@Override public Message[] decode(InputStream input) throws IOException { SimpleGraniteContext.createThreadInstance(config.getGraniteConfig(), config.getServicesConfig(), new HashMap<String, Object>(0), getClientType().toString()); try { AMF3Deserializer deserializer = new AMF3Deserializer(input); Object[] objects = (Object[])deserializer.readObject(); deserializer.close(); if (objects != null) { Message[] messages = new Message[objects.length]; System.arraycopy(objects, 0, messages, 0, objects.length); for (Message message : messages) { if (message != null && Boolean.TRUE.equals(message.getHeader(Channel.BYTEARRAY_BODY_HEADER))) { byte[] body = (byte[])message.getBody(); deserializer = new AMF3Deserializer(new ByteArrayInputStream(body)); message.setBody(deserializer.readObject()); deserializer.close(); } } return messages; } return new Message[0]; } finally { GraniteContext.release(); } } }
@Override public Message[] decode(InputStream input) throws IOException { SimpleGraniteContext.createThreadInstance(config.getGraniteConfig(), config.getServicesConfig(), new HashMap<String, Object>(0), getClientType().toString()); try { AMF3Deserializer deserializer = new AMF3Deserializer(input); Object[] objects = (Object[])deserializer.readObject(); deserializer.close(); if (objects != null) { Message[] messages = new Message[objects.length]; System.arraycopy(objects, 0, messages, 0, objects.length); for (Message message : messages) { if (message != null && Boolean.TRUE.equals(message.getHeader(Channel.BYTEARRAY_BODY_HEADER))) { byte[] body = (byte[])message.getBody(); deserializer = new AMF3Deserializer(new ByteArrayInputStream(body)); message.setBody(deserializer.readObject()); deserializer.close(); } } return messages; } return new Message[0]; } finally { GraniteContext.release(); } } }
@Override public Message[] decode(InputStream input) throws IOException { SimpleGraniteContext.createThreadInstance(config.getGraniteConfig(), config.getServicesConfig(), new HashMap<String, Object>(0), getClientType().toString()); try { AMF3Deserializer deserializer = new AMF3Deserializer(input); Object[] objects = (Object[])deserializer.readObject(); deserializer.close(); if (objects != null) { Message[] messages = new Message[objects.length]; System.arraycopy(objects, 0, messages, 0, objects.length); for (Message message : messages) { if (message != null && Boolean.TRUE.equals(message.getHeader(Channel.BYTEARRAY_BODY_HEADER))) { byte[] body = (byte[])message.getBody(); deserializer = new AMF3Deserializer(new ByteArrayInputStream(body)); message.setBody(deserializer.readObject()); deserializer.close(); } } return messages; } return new Message[0]; } finally { GraniteContext.release(); } } }
@Override public Object readObject() throws IOException { OSGiGraniteClassUtil.setDestination(null); Object obj = super.readObject(); if (obj instanceof AbstractMessage && ! (obj instanceof CommandMessage)) { AbstractMessage message = (AbstractMessage) obj; OSGiGraniteClassUtil.setDestination(message.getDestination()); if (Boolean.TRUE.equals(message.getHeader(OSGiConstants.BYTEARRAY_BODY_HEADER))) { byte[] byteArray = (byte[]) message.getBody(); ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); AMF3Deserializer deser = new AMF3Deserializer(bais); message.setBody(deser.readObject()); } } return obj; } }
public void send(AsyncMessage message) throws Exception { Object msg = null; if (Boolean.TRUE.equals(message.getHeader(GravityInternal.BYTEARRAY_BODY_HEADER))) { byte[] byteArray = (byte[])message.getBody(); ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); AMF3Deserializer deser = new AMF3Deserializer(bais); msg = deser.readObject(); deser.close(); // makes jdk7 happy (Resource leak: 'deser' is never closed)... } else msg = message.getBody(); internalSend(message.getHeaders(), msg, message.getMessageId(), message.getCorrelationId(), message.getTimestamp(), message.getTimeToLive()); }