[
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.