diff options
Diffstat (limited to 'java/src/IceInternal/Outgoing.java')
-rw-r--r-- | java/src/IceInternal/Outgoing.java | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/java/src/IceInternal/Outgoing.java b/java/src/IceInternal/Outgoing.java index 09979f49f11..9bc33f4a033 100644 --- a/java/src/IceInternal/Outgoing.java +++ b/java/src/IceInternal/Outgoing.java @@ -455,23 +455,30 @@ public final class Outgoing _os.writeByte((byte)mode.value()); - if(context == null) + if(context != null) { - _os.writeSize(0); + // + // Explicit context + // + Ice.ContextHelper.write(_os, context); } else { - final int sz = context.size(); - _os.writeSize(sz); - if(sz > 0) + // + // Implicit context + // + Ice.ImplicitContextI implicitContext = + _reference.getInstance().getImplicitContext(); + + java.util.Map prxContext = _reference.getContext(); + + if(implicitContext == null) { - java.util.Iterator i = context.entrySet().iterator(); - while(i.hasNext()) - { - java.util.Map.Entry entry = (java.util.Map.Entry)i.next(); - _os.writeString((String)entry.getKey()); - _os.writeString((String)entry.getValue()); - } + Ice.ContextHelper.write(_os, prxContext); + } + else + { + implicitContext.write(prxContext, _os); } } |