int invokeCount = 0;
if (trace) { log.trace(this + "(" + (++invokeCount) + ") invoking " + invocationReq); }
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());
}
setMarshaller(marshaller);
}
}
if (unmarshaller == null)
{
// 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());
// 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());
}
setUnMarshaller(unmarshaller);
}
unmarshaller.setClassLoader(remotingClassLoader);
}
// if raw, then send only param of invocation request
Object payload = null;
Map metadata = invocationReq.getRequestPayload();