use of org.directwebremoting.extend.Calls in project ma-core-public by infiniteautomation.
the class HtmlCallHandler method handle.
/* (non-Javadoc)
* @see org.directwebremoting.Handler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
Calls calls = null;
try {
calls = htmlCallMarshaller.marshallInbound(request, response);
} catch (Exception ex) {
htmlCallMarshaller.marshallException(request, response, ex);
return;
}
Replies replies = remoter.execute(calls);
htmlCallMarshaller.marshallOutbound(replies, request, response);
}
use of org.directwebremoting.extend.Calls in project ma-core-public by infiniteautomation.
the class PlainCallHandler method handle.
/* (non-Javadoc)
* @see org.directwebremoting.Handler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
Calls calls = null;
try {
calls = plainCallMarshaller.marshallInbound(request, response);
} catch (Exception ex) {
plainCallMarshaller.marshallException(request, response, ex);
return;
}
Replies replies = remoter.execute(calls);
plainCallMarshaller.marshallOutbound(replies, request, response);
}
use of org.directwebremoting.extend.Calls in project ma-core-public by infiniteautomation.
the class BaseCallMarshaller method marshallInbound.
/* (non-Javadoc)
* @see org.directwebremoting.extend.Marshaller#marshallInbound(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public Calls marshallInbound(HttpServletRequest request, HttpServletResponse response) throws IOException, ServerException {
// We must parse the parameters before we setup the conduit because it's
// only after doing this that we know the scriptSessionId
WebContext webContext = WebContextFactory.get();
Batch batch = (Batch) request.getAttribute(ATTRIBUTE_BATCH);
if (batch == null) {
batch = new Batch(request, crossDomainSessionSecurity, allowGetForSafariButMakeForgeryEasier, sessionCookieName);
// Save calls for retry exception
request.setAttribute(ATTRIBUTE_BATCH, batch);
}
// Various bits of the Batch need to be stashed away places
storeParsedRequest(request, webContext, batch);
Calls calls = batch.getCalls();
// Debug the environment
if (log.isDebugEnabled() && calls.getCallCount() > 0) {
// We can just use 0 because they are all shared
InboundContext inctx = (InboundContext) batch.getInboundContexts().get(0);
StringBuffer buffer = new StringBuffer();
for (Iterator it = inctx.getInboundVariableNames(); it.hasNext(); ) {
String key = (String) it.next();
InboundVariable value = inctx.getInboundVariable(key);
if (key.startsWith(ProtocolConstants.INBOUND_CALLNUM_PREFIX) && key.indexOf(ProtocolConstants.INBOUND_CALLNUM_SUFFIX + ProtocolConstants.INBOUND_KEY_ENV) != -1) {
buffer.append(key);
buffer.append('=');
buffer.append(value.toString());
buffer.append(", ");
}
}
if (buffer.length() > 0) {
log.debug("Environment: " + buffer.toString());
}
}
callLoop: for (int callNum = 0; callNum < calls.getCallCount(); callNum++) {
Call call = calls.getCall(callNum);
InboundContext inctx = (InboundContext) batch.getInboundContexts().get(callNum);
// Get a list of the available matching methods with the coerced
// parameters that we will use to call it if we choose to use
// that method.
Creator creator = creatorManager.getCreator(call.getScriptName());
// Which method are we using?
Method method = findMethod(call, inctx);
if (method == null) {
String name = call.getScriptName() + '.' + call.getMethodName();
String error = Messages.getString("BaseCallMarshaller.UnknownMethod", name);
log.warn("Marshalling exception: " + error);
call.setMethod(null);
call.setParameters(null);
call.setException(new IllegalArgumentException(error));
continue callLoop;
}
call.setMethod(method);
// Check this method is accessible
accessControl.assertExecutionIsPossible(creator, call.getScriptName(), method);
// Convert all the parameters to the correct types
Object[] params = new Object[method.getParameterTypes().length];
for (int j = 0; j < method.getParameterTypes().length; j++) {
try {
Class paramType = method.getParameterTypes()[j];
InboundVariable param = inctx.getParameter(callNum, j);
TypeHintContext incc = new TypeHintContext(converterManager, method, j);
params[j] = converterManager.convertInbound(paramType, param, inctx, incc);
} catch (MarshallException ex) {
log.warn("Marshalling exception", ex);
call.setMethod(null);
call.setParameters(null);
call.setException(ex);
continue callLoop;
}
}
call.setParameters(params);
}
return calls;
}
use of org.directwebremoting.extend.Calls in project ma-core-public by infiniteautomation.
the class Batch method parseParameters.
/**
* Fish out the important parameters
* @throws ServerException If the parsing of input parameter fails
*/
protected void parseParameters() throws ServerException {
Map paramMap = getAllParameters();
calls = new Calls();
// Work out how many calls are in this packet
String callStr = (String) paramMap.remove(ProtocolConstants.INBOUND_CALL_COUNT);
int callCount;
try {
callCount = Integer.parseInt(callStr);
} catch (NumberFormatException ex) {
throw new ServerException(Messages.getString("BaseCallMarshaller.BadCallCount"));
}
// Extract the ids, scriptnames and methodnames
for (int callNum = 0; callNum < callCount; callNum++) {
Call call = new Call();
calls.addCall(call);
InboundContext inctx = new InboundContext();
inboundContexts.add(inctx);
String prefix = ProtocolConstants.INBOUND_CALLNUM_PREFIX + callNum + ProtocolConstants.INBOUND_CALLNUM_SUFFIX;
// The special values
String callId = (String) paramMap.remove(prefix + ProtocolConstants.INBOUND_KEY_ID);
call.setCallId(callId);
if (!LocalUtil.isLetterOrDigitOrUnderline(callId)) {
throw new SecurityException("Call IDs may only contain Java Identifiers");
}
String scriptName = (String) paramMap.remove(prefix + ProtocolConstants.INBOUND_KEY_SCRIPTNAME);
call.setScriptName(scriptName);
if (!LocalUtil.isLetterOrDigitOrUnderline(scriptName)) {
throw new SecurityException("Script names may only contain Java Identifiers");
}
String methodName = (String) paramMap.remove(prefix + ProtocolConstants.INBOUND_KEY_METHODNAME);
call.setMethodName(methodName);
if (!LocalUtil.isLetterOrDigitOrUnderline(methodName)) {
throw new SecurityException("Method names may only contain Java Identifiers");
}
// Look for parameters to this method
for (Iterator it = paramMap.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
String key = (String) entry.getKey();
if (key.startsWith(prefix)) {
String data = (String) entry.getValue();
String[] split = ParseUtil.splitInbound(data);
String value = split[LocalUtil.INBOUND_INDEX_VALUE];
String type = split[LocalUtil.INBOUND_INDEX_TYPE];
inctx.createInboundVariable(callNum, key, type, value);
it.remove();
}
}
}
String batchId = (String) paramMap.remove(ProtocolConstants.INBOUND_KEY_BATCHID);
calls.setBatchId(batchId);
if (!LocalUtil.isLetterOrDigitOrUnderline(batchId)) {
throw new SecurityException("Batch IDs may only contain Java Identifiers");
}
httpSessionId = (String) paramMap.remove(ProtocolConstants.INBOUND_KEY_HTTP_SESSIONID);
scriptSessionId = (String) paramMap.remove(ProtocolConstants.INBOUND_KEY_SCRIPT_SESSIONID);
page = (String) paramMap.remove(ProtocolConstants.INBOUND_KEY_PAGE);
for (Iterator it = paramMap.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
if (key.startsWith(ProtocolConstants.INBOUND_KEY_METADATA)) {
spareParameters.put(key.substring(ProtocolConstants.INBOUND_KEY_METADATA.length()), value);
}
}
}
Aggregations