Author: cwiklik
Date: Tue Jul 31 14:02:40 2018
New Revision: 1837147
URL: http://svn.apache.org/viewvc?rev=1837147&view=rev
Log:
UIMA-5821 Modified to serialize Exception object into byte[] for the JD
Modified:
uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
Modified:
uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
URL:
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java?rev=1837147&r1=1837146&r2=1837147&view=diff
==============================================================================
---
uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
(original)
+++
uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
Tue Jul 31 14:02:40 2018
@@ -18,7 +18,9 @@
*/
package org.apache.uima.ducc.ps.service.protocol.builtin;
+import java.io.ByteArrayOutputStream;
import java.io.InvalidClassException;
+import java.io.ObjectOutputStream;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
@@ -249,7 +251,19 @@ public class DefaultServiceProtocolHandl
}
if ( Objects.nonNull(errorAsString ) ) {
IMetaTask mc =
transaction.getMetaTask();
- mc.setUserSpaceException(errorAsString);
+ // the ducc.deploy.JpType is only
present for jobs. If not specified
+ // we return stringified exception to
the client. The JD expects
+ // Java Exception object for its error
handling
+ if (
Objects.isNull(System.getProperty("ducc.deploy.JpType")) ) {
+
+
mc.setUserSpaceException(errorAsString);
+ } else {
+ logger.log(Level.INFO, "Sending
Exception to JD:\n" +
+
((Exception)processResult.getExceptionObject()));
+ // JD expects serialized
exception as byte[]
+
mc.setUserSpaceException(serializeError(processResult.getExceptionObject()));
+ }
+
}
// send END Request
@@ -289,7 +303,24 @@ public class DefaultServiceProtocolHandl
return String.valueOf(Thread.currentThread().getId());
}
-
+ private byte[] serializeError(Throwable t) throws Exception {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+
+ try {
+ oos.writeObject(t);
+ } catch (Exception e) {
+ try {
+ logger.log(Level.WARNING, "Unable to Serialize
"+t.getClass().getName()+" - Will Stringify It Instead");
+
+ } catch( Exception ee) {}
+ throw e;
+ } finally {
+ oos.close();
+ }
+
+ return baos.toByteArray();
+ }
private void delegateStop() {
service.quiesceAndStop();
}