{
log.trace((++invokeCount) + ") invoking =>" + invocationReq + " with parameter: " + invocationReq.getParameter());
}
Marshaller marshaller = getMarshaller();
UnMarshaller unmarshaller = getUnMarshaller();
if (marshaller == null)
{
// try by locator (in case marshaller class name specified)
marshaller = MarshalFactory.getMarshaller(getLocator(), getClassLoader());
if (marshaller == null)
{
// need to have a marshaller, so create a default one
marshaller = MarshalFactory.getMarshaller(getDataType(), getSerializationType());
if (marshaller == null)
{
// went as far as possible to find a marshaller, will have to give up
throw new InvalidMarshallingResource("Can not find a valid marshaller for data type: " + getDataType());
}
}
}
// creating a new classloader containing the remoting class loader (for remote classloading) and
// the current thread's class loader. This allows to load remoting classes as well as user's classes.
ClassLoader remotingClassLoader = new RemotingClassLoader(getClassLoader(),
Thread.currentThread().getContextClassLoader());
if (unmarshaller == null)
{
// try by locator (in case unmarshaller class name specified)
unmarshaller = MarshalFactory.getUnMarshaller(getLocator(), getClassLoader());
if (unmarshaller == null)
{
unmarshaller = MarshalFactory.getUnMarshaller(getDataType(), getSerializationType());
if (unmarshaller == null)
{
// went as far as possible to find a unmarshaller, will have to give up
throw new InvalidMarshallingResource("Can not find a valid unmarshaller for data type: " + getDataType());
}
}
unmarshaller.setClassLoader(remotingClassLoader);
}
// if raw, then send only param of invocation request
Object payload = null;
Map metadata = invocationReq.getRequestPayload();