Author: jochen
Date: Wed Jun 28 02:10:52 2006
New Revision: 417702

URL: http://svn.apache.org/viewvc?rev=417702&view=rev
Log:
Fixed a serious performance problem in the handling of elements with mixed 
content and large text sections.

Added:
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
Modified:
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/Inliner.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/GroupSG.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXElementParser.java
    webservices/jaxme/branches/MAVEN/status.xml
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/Inliner.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/GroupSG.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXElementParser.java
    webservices/jaxme/branches/b0_5/status.xml

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/Inliner.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/Inliner.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/Inliner.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/Inliner.java
 Wed Jun 28 02:10:52 2006
@@ -44,7 +44,7 @@
 
 /** Performs the modifications on an XML schema file, as
  * specified by an external binding file. This is based
- * on a suggestion from Ortwin Glück, see
+ * on a suggestion from Ortwin Glueck, see
  * <a href="http://wiki.apache.org/ws/JaxMe/ExternalSchemaBindings";>
  * http://wiki.apache.org/ws/JaxMe/ExternalSchemaBindings</a>.
  */

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/GroupSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/GroupSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/GroupSG.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/GroupSG.java
 Wed Jun 28 02:10:52 2006
@@ -15,12 +15,8 @@
  */
 package org.apache.ws.jaxme.generator.sg;
 
-import org.apache.ws.jaxme.js.JavaSource;
 import org.apache.ws.jaxme.xs.XSParticle;
 import org.apache.ws.jaxme.xs.xml.XsQName;
-import org.apache.ws.jaxme.generator.sg.Context;
-import org.apache.ws.jaxme.generator.sg.ParticleSG;
-import org.apache.ws.jaxme.generator.sg.SGItem;
 import org.xml.sax.SAXException;
 
 

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
 Wed Jun 28 02:10:52 2006
@@ -42,6 +42,7 @@
 import org.apache.ws.jaxme.generator.sg.impl.ccsg.SimpleContentHandlerSG;
 import org.apache.ws.jaxme.impl.JMSAXDriver;
 import org.apache.ws.jaxme.impl.JMSAXElementParser;
+import org.apache.ws.jaxme.impl.JMSAXMixedElementParser;
 import org.apache.ws.jaxme.js.JavaQName;
 import org.apache.ws.jaxme.js.JavaSource;
 import org.apache.ws.jaxme.js.JavaSourceFactory;
@@ -292,7 +293,13 @@
        }
 
        private void createXMLHandler(ComplexTypeSG pController, JavaSource 
pJs) throws SAXException {
-               pJs.addExtends(JMSAXElementParser.class);
+           final Class parserClass;
+        if (!pController.hasSimpleContent()  &&  
pController.getComplexContentSG().isMixed()) {
+            parserClass = JMSAXMixedElementParser.class;
+        } else {
+            parserClass = JMSAXElementParser.class;
+        }
+        pJs.addExtends(parserClass);
                HandlerSG handlerSG = newHandlerSG(pController, pJs);
                handlerSG.generate();
        }

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 Wed Jun 28 02:10:52 2006
@@ -305,6 +305,14 @@
                return result;
        }
 
+    public JavaMethod newIsFinishedMethod() throws SAXException {
+        JavaMethod jm = super.newIsFinishedMethod();
+        if (isMixed) {
+            jm.addLine("normalize();");
+        }
+        return jm;
+    }
+
        private void handleEndElementState(JavaMethod pJm, LocalJavaField 
pElement,
                                                                           
ParticleSG pParticle) throws SAXException {
                if (pParticle.isElement()) {
@@ -396,33 +404,26 @@
                if (!isMixed) {
                        return null;
                }
+        if (ccSG != null) {
+            return null;
+        }
                JavaMethod jm = getJavaSource().newJavaMethod("addText", 
void.class, JavaSource.PUBLIC);
                Parameter buffer = jm.addParam(char[].class, "pBuffer");
                Parameter offset = jm.addParam(int.class, "pOffset");
                Parameter length = jm.addParam(int.class, "pLength");
-               if (ccSG == null) {
-                       jm.addLine(outerHandler.getJavaSource().getQName(), 
".this.addText(",
-                                          buffer, ", ", offset, ", ", length, 
");");
-               } else {
-                       JavaQName elementInterface = 
ctSG.getClassContext().getXMLInterfaceName();
-                       LocalJavaField element = 
jm.newJavaField(elementInterface);
-                       element.addLine("(", elementInterface, ") result");
-                       Object s = new Object[]{"new ", String.class, "(", 
buffer, ", ",
-                                                                       offset, 
", ", length, ")"};
-                       LocalJavaField list = jm.newJavaField(List.class);
-                       list.addLine(element, ".getContent()");
-                       jm.addIf(list, ".size() > 0");
-                       LocalJavaField o = jm.newJavaField(Object.class);
-                       o.addLine(list, ".get(", list, ".size()-1)");
-                       jm.addIf(o, " instanceof ", String.class);
-                       jm.addLine(list, ".set(", list, ".size()-1, ",
-                                          "((", String.class, ") ", o, ") + ", 
s, ");");
-                       jm.addLine("return;");
-                       jm.addEndIf();
-                       jm.addEndIf();
-                       jm.addLine(list, ".add(", s, ");");
-               }
-               return jm;
+               jm.addLine(outerHandler.getJavaSource().getQName(), 
".this.addText(",
+                       buffer, ", ", offset, ", ", length, ");");
+        return jm;
+    }
+
+    private JavaMethod newContentListMethod() {
+        if (!isMixed) {
+            return null;
+        }
+        JavaMethod jm = getJavaSource().newJavaMethod("getContentList", 
List.class, JavaSource.PROTECTED);
+        JavaQName elementInterface = 
ctSG.getClassContext().getXMLInterfaceName();
+        jm.addLine("return ((", elementInterface, ") result).getContent();");
+        return jm;
        }
 
        private JavaMethod newGetHandlerMethod(JavaSource pOuter) throws 
SAXException {
@@ -435,6 +436,7 @@
                super.generate();
                newAddTextMethod();
                newIsMixedMethod();
+        newContentListMethod();
                for (Iterator iter = groups.values().iterator();  
iter.hasNext();  ) {
                        HandlerSG handler = (HandlerSG) iter.next();
                        handler.generate();

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXElementParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXElementParser.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXElementParser.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXElementParser.java
 Wed Jun 28 02:10:52 2006
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2005-2006  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.ws.jaxme.impl;
 
 import javax.xml.bind.ValidationEvent;

Added: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java?rev=417702&view=auto
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
 (added)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
 Wed Jun 28 02:10:52 2006
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2006  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+import java.util.List;
+
+
+/** A subclass of [EMAIL PROTECTED] 
org.apache.ws.jaxme.impl.JMSAXElementParser}
+ * for parsing complex elements.
+ */
+public abstract class JMSAXMixedElementParser extends JMSAXElementParser {
+    protected abstract List getContentList();
+
+    protected void normalize() {
+        List list = getContentList();
+        boolean previousIsString = false;
+        for (int i = list.size()-1;  i >= 0;  i--) {
+            Object o = list.get(i);
+            if (o instanceof StringBuffer) {
+                if (previousIsString) {
+                    StringBuffer sb = (StringBuffer) o;
+                    sb.append((String) list.remove(i+1));
+                }
+                list.set(i, o.toString());
+                previousIsString = true;
+            } else if (o instanceof String) {
+                if (previousIsString) {
+                    list.set(i, (String) o + (String) list.remove(i+1));
+                }
+                previousIsString = true;
+            } else {
+                previousIsString = false;
+            }
+        }
+    }
+
+    public void addText(char[] pBuffer, int pOffset, int pLength) {
+        java.util.List list = getContentList();
+        StringBuffer sb = null;
+        if (list.size() > 0) {
+            java.lang.Object _3 = list.get(list.size()-1);
+            if (_3 instanceof StringBuffer) {
+                sb = (StringBuffer) _3;
+            }
+        }
+        if (sb == null) {
+            sb = new StringBuffer();
+            list.add(sb);
+        }
+        sb.append(pBuffer, pOffset, pLength);
+    }
+}

Modified: webservices/jaxme/branches/MAVEN/status.xml
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/status.xml?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/status.xml (original)
+++ webservices/jaxme/branches/MAVEN/status.xml Wed Jun 28 02:10:52 2006
@@ -54,6 +54,10 @@
         The TaminoAPI4JPM wasn't supporting query parameters.
         (Theo Straeten, theo.straeten at softwareag.com)
       </action>
+      <action dev="JW" type="fix" context="jm">
+        Fixed a serious performance problem, if mixed content elements
+        had large embedded text segments.
+      </action>
     </release>
        <release version="0.5.1" date="Not yet published">
       <action dev="JW" type="enhancement" context="js">

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/Inliner.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/Inliner.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/Inliner.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/Inliner.java
 Wed Jun 28 02:10:52 2006
@@ -44,7 +44,7 @@
 
 /** Performs the modifications on an XML schema file, as
  * specified by an external binding file. This is based
- * on a suggestion from Ortwin Glück, see
+ * on a suggestion from Ortwin Glueck, see
  * <a href="http://wiki.apache.org/ws/JaxMe/ExternalSchemaBindings";>
  * http://wiki.apache.org/ws/JaxMe/ExternalSchemaBindings</a>.
  */

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/GroupSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/GroupSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/GroupSG.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/GroupSG.java
 Wed Jun 28 02:10:52 2006
@@ -15,12 +15,8 @@
  */
 package org.apache.ws.jaxme.generator.sg;
 
-import org.apache.ws.jaxme.js.JavaSource;
 import org.apache.ws.jaxme.xs.XSParticle;
 import org.apache.ws.jaxme.xs.xml.XsQName;
-import org.apache.ws.jaxme.generator.sg.Context;
-import org.apache.ws.jaxme.generator.sg.ParticleSG;
-import org.apache.ws.jaxme.generator.sg.SGItem;
 import org.xml.sax.SAXException;
 
 

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java
 Wed Jun 28 02:10:52 2006
@@ -42,6 +42,7 @@
 import org.apache.ws.jaxme.generator.sg.impl.ccsg.SimpleContentHandlerSG;
 import org.apache.ws.jaxme.impl.JMSAXDriver;
 import org.apache.ws.jaxme.impl.JMSAXElementParser;
+import org.apache.ws.jaxme.impl.JMSAXMixedElementParser;
 import org.apache.ws.jaxme.js.JavaQName;
 import org.apache.ws.jaxme.js.JavaSource;
 import org.apache.ws.jaxme.js.JavaSourceFactory;
@@ -292,7 +293,13 @@
        }
 
        private void createXMLHandler(ComplexTypeSG pController, JavaSource 
pJs) throws SAXException {
-               pJs.addExtends(JMSAXElementParser.class);
+           final Class parserClass;
+        if (!pController.hasSimpleContent()  &&  
pController.getComplexContentSG().isMixed()) {
+            parserClass = JMSAXMixedElementParser.class;
+        } else {
+            parserClass = JMSAXElementParser.class;
+        }
+        pJs.addExtends(parserClass);
                HandlerSG handlerSG = newHandlerSG(pController, pJs);
                handlerSG.generate();
        }

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 Wed Jun 28 02:10:52 2006
@@ -305,6 +305,14 @@
                return result;
        }
 
+    public JavaMethod newIsFinishedMethod() throws SAXException {
+        JavaMethod jm = super.newIsFinishedMethod();
+        if (isMixed) {
+            jm.addLine("normalize();");
+        }
+        return jm;
+    }
+
        private void handleEndElementState(JavaMethod pJm, LocalJavaField 
pElement,
                                                                           
ParticleSG pParticle) throws SAXException {
                if (pParticle.isElement()) {
@@ -396,33 +404,26 @@
                if (!isMixed) {
                        return null;
                }
+        if (ccSG != null) {
+            return null;
+        }
                JavaMethod jm = getJavaSource().newJavaMethod("addText", 
void.class, JavaSource.PUBLIC);
                Parameter buffer = jm.addParam(char[].class, "pBuffer");
                Parameter offset = jm.addParam(int.class, "pOffset");
                Parameter length = jm.addParam(int.class, "pLength");
-               if (ccSG == null) {
-                       jm.addLine(outerHandler.getJavaSource().getQName(), 
".this.addText(",
-                                          buffer, ", ", offset, ", ", length, 
");");
-               } else {
-                       JavaQName elementInterface = 
ctSG.getClassContext().getXMLInterfaceName();
-                       LocalJavaField element = 
jm.newJavaField(elementInterface);
-                       element.addLine("(", elementInterface, ") result");
-                       Object s = new Object[]{"new ", String.class, "(", 
buffer, ", ",
-                                                                       offset, 
", ", length, ")"};
-                       LocalJavaField list = jm.newJavaField(List.class);
-                       list.addLine(element, ".getContent()");
-                       jm.addIf(list, ".size() > 0");
-                       LocalJavaField o = jm.newJavaField(Object.class);
-                       o.addLine(list, ".get(", list, ".size()-1)");
-                       jm.addIf(o, " instanceof ", String.class);
-                       jm.addLine(list, ".set(", list, ".size()-1, ",
-                                          "((", String.class, ") ", o, ") + ", 
s, ");");
-                       jm.addLine("return;");
-                       jm.addEndIf();
-                       jm.addEndIf();
-                       jm.addLine(list, ".add(", s, ");");
-               }
-               return jm;
+               jm.addLine(outerHandler.getJavaSource().getQName(), 
".this.addText(",
+                       buffer, ", ", offset, ", ", length, ");");
+        return jm;
+    }
+
+    private JavaMethod newContentListMethod() {
+        if (!isMixed) {
+            return null;
+        }
+        JavaMethod jm = getJavaSource().newJavaMethod("getContentList", 
List.class, JavaSource.PROTECTED);
+        JavaQName elementInterface = 
ctSG.getClassContext().getXMLInterfaceName();
+        jm.addLine("return ((", elementInterface, ") result).getContent();");
+        return jm;
        }
 
        private JavaMethod newGetHandlerMethod(JavaSource pOuter) throws 
SAXException {
@@ -435,6 +436,7 @@
                super.generate();
                newAddTextMethod();
                newIsMixedMethod();
+        newContentListMethod();
                for (Iterator iter = groups.values().iterator();  
iter.hasNext();  ) {
                        HandlerSG handler = (HandlerSG) iter.next();
                        handler.generate();

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXElementParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXElementParser.java?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXElementParser.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXElementParser.java
 Wed Jun 28 02:10:52 2006
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2005-2006  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.ws.jaxme.impl;
 
 import javax.xml.bind.ValidationEvent;

Added: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java?rev=417702&view=auto
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
 (added)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JMSAXMixedElementParser.java
 Wed Jun 28 02:10:52 2006
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2006  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.impl;
+
+import java.util.List;
+
+
+/** A subclass of [EMAIL PROTECTED] 
org.apache.ws.jaxme.impl.JMSAXElementParser}
+ * for parsing complex elements.
+ */
+public abstract class JMSAXMixedElementParser extends JMSAXElementParser {
+    protected abstract List getContentList();
+
+    protected void normalize() {
+        List list = getContentList();
+        boolean previousIsString = false;
+        for (int i = list.size()-1;  i >= 0;  i--) {
+            Object o = list.get(i);
+            if (o instanceof StringBuffer) {
+                if (previousIsString) {
+                    StringBuffer sb = (StringBuffer) o;
+                    sb.append((String) list.remove(i+1));
+                }
+                list.set(i, o.toString());
+                previousIsString = true;
+            } else if (o instanceof String) {
+                if (previousIsString) {
+                    list.set(i, (String) o + (String) list.remove(i+1));
+                }
+                previousIsString = true;
+            } else {
+                previousIsString = false;
+            }
+        }
+    }
+
+    public void addText(char[] pBuffer, int pOffset, int pLength) {
+        java.util.List list = getContentList();
+        StringBuffer sb = null;
+        if (list.size() > 0) {
+            java.lang.Object _3 = list.get(list.size()-1);
+            if (_3 instanceof StringBuffer) {
+                sb = (StringBuffer) _3;
+            }
+        }
+        if (sb == null) {
+            sb = new StringBuffer();
+            list.add(sb);
+        }
+        sb.append(pBuffer, pOffset, pLength);
+    }
+}

Modified: webservices/jaxme/branches/b0_5/status.xml
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/status.xml?rev=417702&r1=417701&r2=417702&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/status.xml (original)
+++ webservices/jaxme/branches/b0_5/status.xml Wed Jun 28 02:10:52 2006
@@ -46,6 +46,10 @@
         The methods AbstractJavaMethod.getParamNames() and getParamTypes()
         are throwing an ArrayIndexOutOfBoundsException.
       </action>
+      <action dev="JW" type="fix" context="jm">
+        Fixed a serious performance problem, if mixed content elements
+        had large embedded text segments.
+      </action>
     </release>
     <release version="0.5.1" date="06-Jan-2006">
       <action dev="JW" type="enhancement" context="js">



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to