[ 
https://issues.apache.org/jira/browse/ODE-349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12617685#action_12617685
 ] 

Dan Kearns commented on ODE-349:
--------------------------------

Ok, pretty crude, but this works. Didn't test it extensively, but did try at 
least one cbp of each flavor.

[EMAIL PROTECTED] :-)svn diff src/main/java/org/apache/ode/bpel/o/OAssign.java  
Index: src/main/java/org/apache/ode/bpel/o/OAssign.java
===================================================================
--- src/main/java/org/apache/ode/bpel/o/OAssign.java    (revision 429)
+++ src/main/java/org/apache/ode/bpel/o/OAssign.java    (working copy)
@@ -22,7 +22,9 @@
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Document;
 
+import java.io.DataInputStream;
 import java.io.IOException;
+import java.io.PushbackInputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -82,18 +84,38 @@
         private void writeObject(java.io.ObjectOutputStream out)
                 throws IOException
         {
-            out.writeUTF(DOMUtils.domToString(xmlLiteral));
+         String x = DOMUtils.domToString(xmlLiteral);
+         int len = x.length();
+          // marker for compatibility with old processes
+         out.write(255); out.write(255);
+         out.writeInt(len);
+         out.writeChars(x);
         }
 
         private void readObject(java.io.ObjectInputStream in)
                 throws IOException
         {
-            String domStr = in.readUTF();
-            try {
-                xmlLiteral = DOMUtils.stringToDOM(domStr).getOwnerDocument();
-            } catch (Exception ex) {
-                throw (IOException)(new IOException("XML de-serialization 
error.")).initCause(ex);
-            }
+         String domStr;
+         PushbackInputStream pin = new PushbackInputStream(in, 2);
+          int marker1 = pin.read();
+          int marker2 = pin.read();
+          if(marker1 == 255 && marker2 == 255) {
+             int len = in.readInt();
+             StringBuffer sb = new StringBuffer();
+             for(int i=0;i<len;++i) {
+                sb.append(in.readChar());
+             }
+            domStr = sb.toString();
+          } else {
+             pin.unread(marker2);
+             pin.unread(marker1);
+             domStr = new DataInputStream(pin).readUTF();
+          }
+          try {
+             xmlLiteral = DOMUtils.stringToDOM(domStr).getOwnerDocument();
+          } catch (Exception ex) {
+             throw (IOException)(new IOException("XML de-serialization 
error.")).initCause(ex);
+          }
         }
 
     }


> OAssign$Literal serialization breaks for large literals
> -------------------------------------------------------
>
>                 Key: ODE-349
>                 URL: https://issues.apache.org/jira/browse/ODE-349
>             Project: ODE
>          Issue Type: Bug
>          Components: BPEL Compilation/Parsing
>            Reporter: Dan Kearns
>
> writeUTF has a 64k limit on string size. Here's a fix against an older 
> branch, but it should work against trunk as well.
> [EMAIL PROTECTED] :-)svn diff 
> src/main/java/org/apache/ode/bpel/o/OAssign.java 
> Index: src/main/java/org/apache/ode/bpel/o/OAssign.java
> ===================================================================
> --- src/main/java/org/apache/ode/bpel/o/OAssign.java    (revision 429)
> +++ src/main/java/org/apache/ode/bpel/o/OAssign.java    (working copy)
> @@ -82,13 +82,21 @@
>          private void writeObject(java.io.ObjectOutputStream out)
>                  throws IOException
>          {
> -            out.writeUTF(DOMUtils.domToString(xmlLiteral));
> +         String x = DOMUtils.domToString(xmlLiteral);
> +         int len = x.length();
> +         out.writeInt(len);
> +         out.writeChars(x);
>          }
>  
>          private void readObject(java.io.ObjectInputStream in)
>                  throws IOException
>          {
> -            String domStr = in.readUTF();
> +           int len = in.readInt();
> +           StringBuffer sb = new StringBuffer();
> +           for(int i=0;i<len;++i) {
> +              sb.append(in.readChar());
> +           }
> +           String domStr = sb.toString();
>              try {
>                  xmlLiteral = DOMUtils.stringToDOM(domStr).getOwnerDocument();
>              } catch (Exception ex) {

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to