You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/08/20 10:17:07 UTC
svn commit: r234006 - in /struts/sandbox/trunk/ti/core/src:
java/org/apache/ti/config/ java/org/apache/ti/devmode/
java/org/apache/ti/processor/ java/org/apache/ti/util/
test/org/apache/ti/config/
Author: mrdon
Date: Sat Aug 20 01:17:03 2005
New Revision: 234006
URL: http://svn.apache.org/viewcvs?rev=234006&view=rev
Log:
* Refactored template processing to its own service
* Started looking at how to handle compilation errors
Added:
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java (with props)
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm (with props)
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java (with props)
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java (with props)
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/velocity.properties
- copied unchanged from r233126, struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/velocity.properties
Removed:
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/velocity.properties
Modified:
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/spring-config-servlet.xml
struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/CompilingObjectFactory.java
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java
Modified: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java (original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/ProcessTagsTask.java Sat Aug 20 01:17:03 2005
@@ -17,6 +17,8 @@
*/
package org.apache.ti.config;
+import org.apache.ti.util.*;
+
import java.util.List;
import java.util.ArrayList;
@@ -46,8 +48,12 @@
}
public void execute() {
+ VelocityTemplateProcessor proc = new VelocityTemplateProcessor();
+ proc.init();
+
XDocletParser parser = new XDocletParser();
- parser.init();
+ parser.setTemplateProcessor(proc);
+
ProcessTags pt = new ProcessTags();
pt.setXdocletParser(parser);
Modified: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java (original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/XDocletParser.java Sat Aug 20 01:17:03 2005
@@ -30,11 +30,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.exception.ParseErrorException;
import xjavadoc.XClass;
import xjavadoc.XMethod;
@@ -42,30 +37,22 @@
import xjavadoc.filesystem.ReaderFile;
import xjavadoc.filesystem.XJavadocFile;
+import org.apache.ti.util.*;
+
/**
* Processes xdoclet-style tags and uses a velocity template to generate
* content. This class is not thread-safe.
*/
public class XDocletParser {
- private VelocityEngine velocity = null;
- private Map templateCache = new HashMap();
private Map parameters;
+ private TemplateProcessor processor;
private static final Log log = LogFactory.getLog(XDocletParser.class);
- public void init() {
- velocity = new VelocityEngine();
-
- Properties props = new Properties();
- try {
- props.load(getClass().getResourceAsStream("velocity.properties"));
- velocity.init(props);
- } catch (Exception ex) {
- log.error("Unable to intialize velocity", ex);
- }
-
+ public void setTemplateProcessor(TemplateProcessor p) {
+ this.processor = p;
}
-
+
public void setParameters(Map map) {
this.parameters = map;
}
@@ -93,34 +80,26 @@
jdoc.addAbstractFile(className, file);
}
- Map contextMap = new HashMap();
+ Map context = new HashMap();
if (parameters != null) {
- contextMap.putAll(parameters);
+ context.putAll(parameters);
}
- VelocityContext context = new VelocityContext(contextMap);
OutputType output;
XClass xclass;
- Template template;
for (Iterator o = outputs.iterator(); o.hasNext(); ) {
output = (OutputType)o.next();
- try {
- template = velocity.getTemplate(output.getTemplate());
- } catch (Exception ex) {
- log.error("Unable to locate or parse template: "+output.getTemplate(), ex);
- continue;
- }
if (output.getFrequency() == output.ONCE) {
- generateOnce(sources, destRoot, jdoc, output, template, context);
+ generateOnce(sources, destRoot, jdoc, output, context);
} else {
for (Iterator i = sources.iterator(); i.hasNext(); ) {
source = (String)i.next();
xclass = jdoc.getXClass(getClassName(source));
if (output.getFrequency() == output.PER_CONTROLLER) {
- generatePerController(source, destRoot, xclass, output, template, context);
+ generatePerController(source, destRoot, xclass, output, context);
} else if (output.getFrequency() == output.PER_ACTION) {
- generatePerAction(source, destRoot, xclass, output, template, context);
+ generatePerAction(source, destRoot, xclass, output, context);
}
}
}
@@ -128,7 +107,7 @@
}
protected void generateOnce(List sources, File destRoot, XJavaDoc jdoc,
- OutputType output, Template template, VelocityContext context) {
+ OutputType output, Map context) {
String source, className;
XClass xclass;
Map xclasses = new HashMap();
@@ -140,22 +119,22 @@
}
Writer writer = output.getWriter(destRoot, null, null);
context.put("xclasses", xclasses);
- writeOutput(template, writer, context);
+ processor.process(output.getTemplate(), context, writer);
}
protected void generatePerController(String source, File destRoot, XClass xclass,
- OutputType output, Template template, VelocityContext context) {
+ OutputType output, Map context) {
Writer writer = output.getWriter(destRoot, source, null);
context.put("xclass", xclass);
context.put("javaFile", source);
- writeOutput(template, writer, context);
+ processor.process(output.getTemplate(), context, writer);
}
protected void generatePerAction(String source, File destRoot, XClass xclass,
- OutputType output, Template template, VelocityContext context) {
+ OutputType output, Map context) {
List methods = xclass.getMethods();
XMethod m;
Writer writer;
@@ -167,22 +146,8 @@
context.put("xmethod", m);
context.put("javaFile", source);
- writeOutput(template, writer, context);
+ processor.process(output.getTemplate(), context, writer);
}
}
- }
-
- protected void writeOutput(Template template, Writer writer, VelocityContext ctx) {
- try {
- template.merge(ctx, writer);
- } catch (Exception ex) {
- log.error("Unable to generate output", ex);
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException ex) {}
- }
- }
}
}
Modified: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/spring-config-servlet.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/spring-config-servlet.xml?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/spring-config-servlet.xml (original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/config/spring-config-servlet.xml Sat Aug 20 01:17:03 2005
@@ -23,6 +23,7 @@
<bean id="compilingObjectFactory" class="org.apache.ti.processor.CompilingObjectFactory">
<property name="javaCompiler" ref="javaCompiler" />
+ <property name="compilationProblemHandler" ref="compilationProblemHandler" />
<property name="srcPath"><value>${ti.srcPath}</value></property>
</bean>
@@ -33,13 +34,21 @@
<property name="classesPath"><value>${ti.classesPath}</value></property>
</bean>
+ <bean id="templateProcessor" class="org.apache.ti.util.VelocityTemplateProcessor" init-method="init" />
+
+ <bean id="compilationProblemHandler" class="org.apache.ti.devmode.TemplateCompilationProblemHandler">
+ <property name="templateProcessor" ref="templateProcessor" />
+ </bean>
+
<bean id="actionProxyFactory" class="org.apache.ti.processor.ControllerActionProxyFactory" />
<bean id="processTags" class="org.apache.ti.config.ProcessTags">
<property name="xdocletParser" ref="xdocletParser" />
</bean>
- <bean id="xdocletParser" class="org.apache.ti.config.XDocletParser" init-method="init" />
+ <bean id="xdocletParser" class="org.apache.ti.config.XDocletParser">
+ <property name="templateProcessor" ref="templateProcessor" />
+ </bean>
<!-- Chain commands that need DI -->
<bean id="createActionMapping" class="org.apache.ti.processor.chain.CreateActionMapping">
Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java?rev=234006&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java Sat Aug 20 01:17:03 2005
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1999-2004 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.ti.devmode;
+
+import org.apache.commons.jci.problems.*;
+import java.util.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ti.util.*;
+
+
+
+
+/**
+ */
+public class TemplateCompilationProblemHandler implements CompilationProblemHandler {
+
+ private final static Log log = LogFactory.getLog(TemplateCompilationProblemHandler.class);
+
+ private int errors;
+ private int warnings;
+ private List problems = new ArrayList();
+ private TemplateProcessor processor;
+ private String template = "org/apache/ti/devmode/compilationProblems.vm";
+
+ public void setTemplateProcessor(TemplateProcessor p) {
+ this.processor = p;
+ }
+
+ public void handle( final CompilationProblem pProblem ) {
+ problems.add(pProblem);
+ if (pProblem.isError()) {
+ errors++;
+ } else {
+ warnings++;
+ }
+
+ log.debug(pProblem);
+ }
+
+ public String getResultPage() {
+ Map ctx = new HashMap();
+ ctx.put("problems", problems);
+ ctx.put("errorCount", new Integer(errors));
+ ctx.put("warningCount", new Integer(warnings));
+ String page = processor.process(template, ctx);
+ return page;
+ }
+
+
+ public int getErrorCount() {
+ return errors;
+ }
+ public int getWarningCount() {
+ return warnings;
+ }
+
+ public void clear() {
+ log.info(getResultPage());
+ errors = 0;
+ warnings = 0;
+ problems.clear();
+ }
+}
Propchange: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/TemplateCompilationProblemHandler.java
------------------------------------------------------------------------------
svn:executable = *
Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm?rev=234006&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm Sat Aug 20 01:17:03 2005
@@ -0,0 +1,34 @@
+<h2>Compilation problems</h2>
+<ul>
+ <li>Errors - $errorCount</li>
+ <li>Warnings - $warningCount</li>
+</ul>
+
+<h3>Errors</h3>
+#foreach ($err in $problems)
+ #if ($err.isError())
+ <p>
+ <code>${err.fileName}:${err.getStartLine}</code> - $err.message
+ <br />
+ Start line:$err.startLine column:${err.startColumn}
+ <br />
+ End line:$err.endLine column:${err.endColumn}
+ </p>
+ <hr />
+ #end
+#end
+
+<h3>Warnings</h3>
+#foreach ($err in $problems)
+ #if (!$err.isError())
+ <p>
+ <code>${err.fileName}:${err.startLine}</code> - $err.message
+ <br />
+ Start line:$err.startLine column:${err.startColumn}
+ <br />
+ End line:$err.endLine column:${err.endColumn}
+ </p>
+ <hr />
+ #end
+#end
+
Propchange: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/devmode/compilationProblems.vm
------------------------------------------------------------------------------
svn:executable = *
Modified: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/CompilingObjectFactory.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/CompilingObjectFactory.java?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/CompilingObjectFactory.java (original)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/processor/CompilingObjectFactory.java Sat Aug 20 01:17:03 2005
@@ -26,7 +26,9 @@
import java.io.File;
-import org.apache.commons.jci.CompilingClassLoader;
+import org.apache.commons.jci.*;
+import org.apache.commons.jci.stores.*;
+import org.apache.commons.jci.problems.*;
import org.apache.commons.jci.compilers.JavaCompiler;
import org.apache.commons.logging.*;
@@ -40,20 +42,36 @@
private static final Log log = LogFactory.getLog(CompilingObjectFactory.class);
private CompilingClassLoader cl;
private JavaCompiler compiler;
+ private CompilationProblemHandler problemHandler;
public void setJavaCompiler(JavaCompiler jc) {
this.compiler = jc;
- }
+ }
+
+ public void setCompilationProblemHandler(CompilationProblemHandler handler) {
+ this.problemHandler = handler;
+ }
public void setSrcPath(String src) {
if (src != null && src.length() > 0) {
File file = new File(src);
if (file.exists()) {
+ TransactionalResourceStore store = new TransactionalResourceStore(
+ new MemoryResourceStore()) {
+ public void onStart() {
+ };
+ public void onStop() {
+ };
+ }
+ ;
cl = new CompilingClassLoader(
Thread.currentThread().getContextClassLoader(),
file,
- compiler);
+ store,
+ compiler,
+ problemHandler);
+ cl.start();
} else {
log.error("Specified source directory, "+src+" doesn't exist");
}
Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java?rev=234006&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java Sat Aug 20 01:17:03 2005
@@ -0,0 +1,31 @@
+/*
+ * $Id: SourceResolver.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 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.ti.util;
+
+import java.util.Map;
+import java.io.Writer;
+
+/**
+ * Processes a template and generates text output
+ */
+public interface TemplateProcessor {
+
+ public String process(String path, Map context);
+
+ public void process(String path, Map context, Writer writer);
+}
Propchange: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/TemplateProcessor.java
------------------------------------------------------------------------------
svn:executable = *
Added: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java?rev=234006&view=auto
==============================================================================
--- struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java (added)
+++ struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java Sat Aug 20 01:17:03 2005
@@ -0,0 +1,81 @@
+/*
+ * $Id: SourceResolver.java 230400 2005-08-05 05:13:54Z martinc $
+ *
+ * Copyright 2005 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.ti.util;
+
+import java.io.IOException;
+import java.util.*;
+import java.io.*;
+
+import org.apache.commons.chain.web.WebContext;
+import org.apache.velocity.*;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.commons.logging.*;
+
+/**
+ * Resovles resources
+ */
+public class VelocityTemplateProcessor implements TemplateProcessor {
+
+ private static final Log log = LogFactory.getLog(VelocityTemplateProcessor.class);
+
+ private VelocityEngine velocity = null;
+ private Map templateCache = new HashMap();
+
+ public void init() {
+ velocity = new VelocityEngine();
+
+ Properties props = new Properties();
+ try {
+ props.load(getClass().getResourceAsStream("velocity.properties"));
+ velocity.init(props);
+ } catch (Exception ex) {
+ log.error("Unable to intialize velocity", ex);
+ }
+
+ }
+
+ public String process(String path, Map context) {
+ StringWriter writer = new StringWriter();
+ process(path, context, writer);
+ return writer.toString();
+ }
+
+ public void process(String path, Map contextMap, Writer writer) {
+ VelocityContext context = new VelocityContext(contextMap);
+
+ Template template = null;;
+ try {
+ template = velocity.getTemplate(path);
+ } catch (Exception ex) {
+ log.error("Unable to locate or parse template: "+path, ex);
+ return;
+ }
+ try {
+ template.merge(context, writer);
+ } catch (Exception ex) {
+ log.error("Unable to generate output", ex);
+ } finally {
+ try {
+ writer.close();
+ } catch (IOException ex) {
+ // ignore
+ }
+ }
+ }
+
+}
Propchange: struts/sandbox/trunk/ti/core/src/java/org/apache/ti/util/VelocityTemplateProcessor.java
------------------------------------------------------------------------------
svn:executable = *
Modified: struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java (original)
+++ struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/TestXDocletParser.java Sat Aug 20 01:17:03 2005
@@ -29,6 +29,7 @@
import java.io.*;
import java.util.*;
import org.apache.velocity.*;
+import org.apache.ti.util.*;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
@@ -71,7 +72,9 @@
public void testGenerateSimple() throws Exception {
XDocletParser p = new XDocletParser();
- p.init();
+ VelocityTemplateProcessor proc = new VelocityTemplateProcessor();
+ proc.init();
+ p.setTemplateProcessor(proc);
StringOutputType out = new StringOutputType("org/apache/ti/config/test.vm");
List outputs = new ArrayList();
@@ -90,7 +93,9 @@
public void testGenerateTag() throws Exception {
XDocletParser p = new XDocletParser();
- p.init();
+ VelocityTemplateProcessor proc = new VelocityTemplateProcessor();
+ proc.init();
+ p.setTemplateProcessor(proc);
StringOutputType out = new StringOutputType("org/apache/ti/config/testTag.vm");
List outputs = new ArrayList();
Modified: struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java?rev=234006&r1=234005&r2=234006&view=diff
==============================================================================
--- struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java (original)
+++ struts/sandbox/trunk/ti/core/src/test/org/apache/ti/config/XDocletTestBase.java Sat Aug 20 01:17:03 2005
@@ -35,6 +35,7 @@
import org.jdom.xpath.XPath;
import org.apache.ti.*;
+import org.apache.ti.util.*;
/**
* Unit tests for the <code>org.apache.ti.config.XDocletvalidations</code> class.
@@ -48,7 +49,9 @@
public void setUp() throws Exception {
p = new XDocletParser();
- p.init();
+ VelocityTemplateProcessor proc = new VelocityTemplateProcessor();
+ proc.init();
+ p.setTemplateProcessor(proc);
src = makeDir("strutsti-src");
}
@@ -112,6 +115,10 @@
public InputSource resolveEntity (String publicId, String systemId) {
return null;
}
+ });
+ builder.setDTDHandler(new DTDHandler() {
+ public void notationDecl(String name, String publicId, String systemId) {}
+ public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) {}
});
Document doc = builder.build(new StringReader(out));
return doc;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org