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]