summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/EndpointFactoryManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/EndpointFactoryManager.java')
-rw-r--r--java/src/IceInternal/EndpointFactoryManager.java43
1 files changed, 43 insertions, 0 deletions
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;