public boolean send(@NotNull Value value, @Optional JMSQueue replyTo) throws JMSException { Message message = null; if (value.isArray()) { message = _session.createMapMessage(); ArrayValue array = (ArrayValue) value; Set<Map.Entry<Value, Value>> entrySet = array.entrySet(); for (Map.Entry<Value, Value> entry : entrySet) { if (entry.getValue() instanceof BinaryValue) { byte[] bytes = ((BinaryValue) entry.getValue()).toBytes(); ((MapMessage) message).setBytes(entry.getKey().toString(), bytes); } else { // every primitive except for bytes can be translated from a string ((MapMessage) message).setString(entry.getKey().toString(), entry.getValue().toString()); } } } else if (value instanceof BinaryValue) { message = _session.createBytesMessage(); byte[] bytes = ((BinaryValue) value).toBytes(); ((BytesMessage) message).writeBytes(bytes); } else if (value.isLongConvertible()) { message = _session.createStreamMessage(); ((StreamMessage) message).writeLong(value.toLong()); } else if (value.isDoubleConvertible()) { message = _session.createStreamMessage(); ((StreamMessage) message).writeDouble(value.toDouble()); } else if (value.toJavaObject() instanceof String) { message = _session.createTextMessage(); ((TextMessage) message).setText(value.toString()); } else if (value.toJavaObject() instanceof Serializable) { message = _session.createObjectMessage(); ((ObjectMessage) message).setObject((Serializable) value.toJavaObject()); } else { return false; } if (replyTo != null) message.setJMSReplyTo(replyTo._destination); _producer.send(message); return true; }
@Override public Object marshalValue(Env env, FeatureExpr ctx, Value value, Class argClass) { if (!value.isset()) { if (_isNotNull) { unexpectedNull(env, argClass); } return null; } Object obj = value.toJavaObject(); if (obj == null) { if (_isNotNull) { unexpectedNull(env, argClass); } return null; } else if (!argClass.isAssignableFrom(obj.getClass())) { // env.error(L.l("Can't assign {0} to {1}", obj, argClass)); unexpectedType(env, value, obj.getClass(), argClass); return null; } return obj; }
@Override protected int getMarshalingCostImpl(Value argValue) { if (argValue instanceof JavaValue && Path.class.isAssignableFrom(argValue.toJavaObject().getClass())) return Marshal.ZERO; else if (argValue.isString()) return Marshal.THREE; else return Marshal.FOUR; }
@Override protected int getMarshalingCostImpl(Value argValue) { Class type = _def.getType(); if (argValue instanceof JavaValue && type.isAssignableFrom(argValue.toJavaObject().getClass())) return Marshal.ZERO; else return Marshal.FOUR; }
@Override protected int getMarshalingCostImpl(Value argValue) { if (argValue instanceof JavaListAdapter && getExpectedClass().isAssignableFrom(argValue.toJavaObject().getClass())) return Marshal.ZERO; else if (argValue.isArray()) return Marshal.THREE; else return Marshal.FOUR; }