diff options
author | Mark Spruiell <mes@zeroc.com> | 2007-11-05 12:19:49 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2007-11-05 12:19:49 -0800 |
commit | 3c8924663df8629b33c2ddd38907c4bf2eeb83cd (patch) | |
tree | 83b63f2396201019163d140555e42d79f82e46d3 /java/src | |
parent | Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice (diff) | |
download | ice-3c8924663df8629b33c2ddd38907c4bf2eeb83cd.tar.bz2 ice-3c8924663df8629b33c2ddd38907c4bf2eeb83cd.tar.xz ice-3c8924663df8629b33c2ddd38907c4bf2eeb83cd.zip |
- Fixing bug 2522 for Python. This involved adding the C++ class
UserExceptionWriter so that the Python extension can wrap a native
Python user exception into something that the C++ run time can
marshal. Also ported the changes to the servantLocator test.
- Implementing UserExceptionWriter in Java and C#.
- Consolidating the source files for the C# streaming API.
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/Ice/InputStreamI.java | 5 | ||||
-rw-r--r-- | java/src/Ice/ObjectReader.java | 4 | ||||
-rw-r--r-- | java/src/Ice/ObjectWriter.java | 4 | ||||
-rw-r--r-- | java/src/Ice/OutputStreamI.java | 11 | ||||
-rw-r--r-- | java/src/Ice/UserExceptionWriter.java | 57 | ||||
-rw-r--r-- | java/src/IceInternal/BasicInputStream.java | 22 | ||||
-rw-r--r-- | java/src/IceInternal/BasicOutputStream.java | 22 | ||||
-rw-r--r-- | java/src/IceInternal/BasicStream.java | 20 |
8 files changed, 93 insertions, 52 deletions
diff --git a/java/src/Ice/InputStreamI.java b/java/src/Ice/InputStreamI.java index b1b1975811a..4cd30cbd4aa 100644 --- a/java/src/Ice/InputStreamI.java +++ b/java/src/Ice/InputStreamI.java @@ -16,7 +16,8 @@ public class InputStreamI implements InputStream { _communicator = communicator; - _is = new IceInternal.BasicInputStream(Util.getInstance(communicator), this); + _is = new IceInternal.BasicStream(Util.getInstance(communicator)); + _is.closure(this); _is.resize(data.length, true); java.nio.ByteBuffer buf = _is.prepareRead(); buf.position(0); @@ -231,5 +232,5 @@ public class InputStreamI implements InputStream } private Communicator _communicator; - private IceInternal.BasicInputStream _is; + private IceInternal.BasicStream _is; } diff --git a/java/src/Ice/ObjectReader.java b/java/src/Ice/ObjectReader.java index f63570f138c..a3c564260e1 100644 --- a/java/src/Ice/ObjectReader.java +++ b/java/src/Ice/ObjectReader.java @@ -22,7 +22,7 @@ public abstract class ObjectReader extends ObjectImpl public void __read(IceInternal.BasicStream is, boolean rid) { - IceInternal.BasicInputStream bis = (IceInternal.BasicInputStream)is; - read(bis._in, rid); + InputStream stream = (InputStream)is.closure(); + read(stream, rid); } } diff --git a/java/src/Ice/ObjectWriter.java b/java/src/Ice/ObjectWriter.java index fc5afeca4f4..1d8e57fa2d4 100644 --- a/java/src/Ice/ObjectWriter.java +++ b/java/src/Ice/ObjectWriter.java @@ -16,8 +16,8 @@ public abstract class ObjectWriter extends ObjectImpl public void __write(IceInternal.BasicStream os) { - IceInternal.BasicOutputStream bos = (IceInternal.BasicOutputStream)os; - write(bos._out); + OutputStream stream = (OutputStream)os.closure(); + write(stream); } public void diff --git a/java/src/Ice/OutputStreamI.java b/java/src/Ice/OutputStreamI.java index 188080d4f9c..2a0884014ef 100644 --- a/java/src/Ice/OutputStreamI.java +++ b/java/src/Ice/OutputStreamI.java @@ -14,8 +14,15 @@ public class OutputStreamI implements OutputStream public OutputStreamI(Communicator communicator) { + this(communicator, new IceInternal.BasicStream(Util.getInstance(communicator))); + } + + public + OutputStreamI(Communicator communicator, IceInternal.BasicStream os) + { _communicator = communicator; - _os = new IceInternal.BasicOutputStream(Util.getInstance(communicator), this); + _os = os; + _os.closure(this); } public Communicator @@ -200,5 +207,5 @@ public class OutputStreamI implements OutputStream } private Communicator _communicator; - private IceInternal.BasicOutputStream _os; + private IceInternal.BasicStream _os; } diff --git a/java/src/Ice/UserExceptionWriter.java b/java/src/Ice/UserExceptionWriter.java new file mode 100644 index 00000000000..a1d57e59573 --- /dev/null +++ b/java/src/Ice/UserExceptionWriter.java @@ -0,0 +1,57 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +package Ice; + +public abstract class UserExceptionWriter extends UserException +{ + public UserExceptionWriter(Communicator communicator) + { + _communicator = communicator; + } + + public abstract void + write(Ice.OutputStream os); + + public abstract boolean + usesClasses(); + + public void + __write(IceInternal.BasicStream os) + { + OutputStream stream = new OutputStreamI(_communicator, os); + write(stream); + } + + public void + __read(IceInternal.BasicStream is, boolean rid) + { + assert(false); + } + + public void + __write(Ice.OutputStream os) + { + write(os); + } + + public void + __read(Ice.InputStream is, boolean rid) + { + assert(false); + } + + public boolean + __usesClasses() + { + return usesClasses(); + } + + protected Communicator _communicator; +} diff --git a/java/src/IceInternal/BasicInputStream.java b/java/src/IceInternal/BasicInputStream.java deleted file mode 100644 index 188f321fa90..00000000000 --- a/java/src/IceInternal/BasicInputStream.java +++ /dev/null @@ -1,22 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -package IceInternal; - -public class BasicInputStream extends BasicStream -{ - public - BasicInputStream(Instance instance, Ice.InputStream in) - { - super(instance); - _in = in; - } - - public Ice.InputStream _in; -} diff --git a/java/src/IceInternal/BasicOutputStream.java b/java/src/IceInternal/BasicOutputStream.java deleted file mode 100644 index a96ec64927b..00000000000 --- a/java/src/IceInternal/BasicOutputStream.java +++ /dev/null @@ -1,22 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -package IceInternal; - -public class BasicOutputStream extends BasicStream -{ - public - BasicOutputStream(Instance instance, Ice.OutputStream out) - { - super(instance); - _out = out; - } - - public Ice.OutputStream _out; -} diff --git a/java/src/IceInternal/BasicStream.java b/java/src/IceInternal/BasicStream.java index 372b9875f33..2b15bdd6897 100644 --- a/java/src/IceInternal/BasicStream.java +++ b/java/src/IceInternal/BasicStream.java @@ -27,6 +27,7 @@ public class BasicStream initialize(IceInternal.Instance instance, boolean unlimited) { _instance = instance; + _closure = null; _unlimited = unlimited; allocate(1500); _capacity = _buf.capacity(); @@ -80,11 +81,29 @@ public class BasicStream return _instance; } + public Object + closure() + { + return _closure; + } + + public Object + closure(Object p) + { + Object prev = _closure; + _closure = p; + return prev; + } + public void swap(BasicStream other) { assert(_instance == other._instance); + Object tmpClosure = other._closure; + other._closure = _closure; + _closure = tmpClosure; + java.nio.ByteBuffer tmpBuf = other._buf; other._buf = _buf; _buf = tmpBuf; @@ -2294,6 +2313,7 @@ public class BasicStream } private IceInternal.Instance _instance; + private Object _closure; private java.nio.ByteBuffer _buf; private int _capacity; // Cache capacity to avoid excessive method calls. private int _limit; // Cache limit to avoid excessive method calls. |