package org.jboss.remoting.marshal;
import org.jboss.logging.Logger;
import org.jboss.remoting.InvokerLocator;
import org.jboss.remoting.transport.Connector;
import java.util.HashMap;
import java.util.Map;
public class MarshallLoaderFactory
{
protected final static Logger log = Logger.getLogger(MarshallLoaderFactory.class);
public static Connector createMarshallLoader(InvokerLocator locator)
{
Connector marshallerConnector = null;
try
{
marshallerConnector = new MarshallLoaderConnector();
marshallerConnector.setInvokerLocator(locator.getLocatorURI());
marshallerConnector.start();
MarshallerLoaderHandler loader = new MarshallerLoaderHandler();
marshallerConnector.addInvocationHandler("loader", loader);
}
catch(Exception e)
{
log.error("Can not create marshaller loader.", e);
if(marshallerConnector != null)
{
try
{
marshallerConnector.stop();
marshallerConnector.destroy();
}
catch(Exception e1)
{
log.error("Error cleaning up marshaller loader connector.", e1);
}
}
}
return marshallerConnector;
}
public static InvokerLocator convertLocator(InvokerLocator locator)
{
InvokerLocator loaderLocator = null;
if(locator != null)
{
Map params = locator.getParameters();
if(params != null)
{
String sPort = (String) params.get(InvokerLocator.LOADER_PORT);
if(sPort != null)
{
try
{
int port = Integer.parseInt(sPort);
String transport = "socket";
String host = locator.getHost();
String path = locator.getPath();
Map metadata = new HashMap();
metadata.putAll(locator.getParameters());
metadata.remove(InvokerLocator.LOADER_PORT);
metadata.remove(InvokerLocator.MARSHALLER);
metadata.remove(InvokerLocator.UNMARSHALLER);
metadata.remove(InvokerLocator.DATATYPE);
metadata.remove(InvokerLocator.DATATYPE_CASED);
loaderLocator = new InvokerLocator(transport, host, port, path, metadata);
}
catch(NumberFormatException e)
{
log.error("Got loader port (" + sPort + ") from locator uri, but was not an number.");
}
}
}
}
return loaderLocator;
}
}