blob: 567f8f67e2e66d28799f8a0adec1e92d4e723da3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package flex.messaging.messages;
import java.util.Arrays;
import java.util.List;
/**
* This type of message contains information needed to perform
* a Remoting invocation. Some of this information mirrors that
* of the gateway's ActionContext, but the context itself cannot
* be used as the message, because it is available only from the
* AMF Endpoint and not to other endpoints (the RTMP Endpoint has
* no HTTP, and therefore cannot support the request/response and
* session properties of the ActionContext).
*
*
*/
public class RemotingMessage extends RPCMessage
{
/**
* This number was generated using the 'serialver' command line tool.
* This number should remain consistent with the version used by
* ColdFusion to communicate with the message broker over RMI.
*/
private static final long serialVersionUID = 1491092800943415719L;
private String source;
private String operation;
private Object[] parameters;
private transient List parameterList;
public RemotingMessage()
{
}
public String getSource()
{
return source;
}
public void setSource(String s)
{
source = s;
}
public Object getBody()
{
if (parameters == null && parameterList != null)
return parameterList.toArray();
else
return parameters;
}
public void setBody(Object bodyValue)
{
if (bodyValue instanceof List)
{
// some channels/endpoints may send in a list
// and expect to keep a reference to it - amfx
// for example works this way, so keep the list
// around rather than making an array copy
if (parameterList != null)
{
parameterList.addAll((List) bodyValue);
}
else
{
parameterList = (List) bodyValue;
}
}
else if (!bodyValue.getClass().isArray())
{
parameters = new Object[] { bodyValue };
}
else
{
parameters = (Object[]) bodyValue;
}
}
public String getOperation()
{
return operation;
}
public void setOperation(String operation)
{
this.operation = operation;
}
public List getParameters()
{
if (parameters == null && parameterList != null)
{
parameters = parameterList.toArray();
// we can clean up the parameter list now
parameterList = null;
}
return (parameters == null) ? null : Arrays.asList(parameters);
}
public void setParameters(List params)
{
parameters = params.toArray();
}
protected String toStringFields(int indentLevel)
{
String s = getOperation();
String sp = super.toStringFields(indentLevel);
String sep = getFieldSeparator(indentLevel);
//parameters will be showing up as in the body (getBody() is used in super.toStringField())
//so we will skip parameters here
return sep + "operation = " + s + sp;
}
}