From 9cb97bc06da9fdf7e63d167ea5855ad5d5fbfe9c Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Thu, 10 May 2007 05:09:05 +0000 Subject: Bug 1022. --- java/src/IceInternal/EndpointFactoryManager.java | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'java/src/IceInternal/EndpointFactoryManager.java') diff --git a/java/src/IceInternal/EndpointFactoryManager.java b/java/src/IceInternal/EndpointFactoryManager.java index b2d341b04ba..3ddbbe42b60 100644 --- a/java/src/IceInternal/EndpointFactoryManager.java +++ b/java/src/IceInternal/EndpointFactoryManager.java @@ -73,7 +73,50 @@ public final class EndpointFactoryManager if(f.protocol().equals(protocol)) { return f.create(s.substring(m.end())); + + // Code below left in place for debugging. + + /* + EndpointI e = f.create(s.substring(m.end())); + BasicStream bs = new BasicStream(_instance, true); + e.streamWrite(bs); + java.nio.ByteBuffer buf = bs.prepareRead(); + buf.position(0); + short type = bs.readShort(); + EndpointI ue = new IceInternal.UnknownEndpointI(type, bs); + System.err.println("Normal: " + e); + System.err.println("Opaque: " + ue); + return e; + */ + } + } + + // + // If the stringified endpoint is opaque, create an unknown endpoint, + // then see whether the type matches one of the known endpoints. + // + if(protocol.equals("opaque")) + { + EndpointI ue = new UnknownEndpointI(s.substring(m.end())); + for(int i = 0; i < _factories.size(); i++) + { + EndpointFactory f = (EndpointFactory)_factories.get(i); + if(f.type() == ue.type()) + { + // + // Make a temporary stream, write the opaque endpoint data into the stream, + // and ask the factory to read the endpoint data from that stream to create + // the actual endpoint. + // + BasicStream bs = new BasicStream(_instance, true); + ue.streamWrite(bs); + java.nio.ByteBuffer buf = bs.prepareRead(); + buf.position(0); + short type = bs.readShort(); + return f.read(bs); + } } + return ue; // Endpoint is opaque, but we don't have a factory for its type. } return null; -- cgit v1.2.3