// 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.
RemotingClassLoader remotingClassLoader = null;
if (parentFirstClassLoading)
{
remotingClassLoader = new RemotingClassLoader(getClassLoader(), Thread.currentThread().getContextClassLoader());
}
else
{
remotingClassLoader = new RemotingClassLoader(Thread.currentThread().getContextClassLoader(), getClassLoader());
}
remotingClassLoader.setUseCurrentThreadClassLoader(useCurrentThreadClassLoader);
// try by locator (in case unmarshaller class name specified)
Map map = passConfigMapToMarshalFactory ? configuration : null;
unmarshaller = MarshalFactory.getUnMarshaller(getLocator(), getClassLoader(), map);
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);