Hi,
I ran into the following problem: I want to specify a local forward that
represents an action URL. The action requires parameters that I want to
pass
in common HTTP fashion, namely
/product.do?action=list&sortBy=date&order=desc
Therefore, I have an entry in struts-confix.xml that looks like this:
<action path="/product"
type="tquas.bogus.servlet.ProductActions"
parameter="action"
name="productForm"
scope="request"
unknown="false"
validate="true">
<forward name="postCreate"
path="/product.do?action=list&sortBy=date&order=desc&count=10"/>
</action>
where ProductActions is a subclass of DispatchAction containing an
implementation of method list().
The problem is that the XML parser throws an exception, basically
telling me
that ampersands are not allowed in this URI:
org.xml.sax.SAXParseException: Next character must be ";" terminating
reference to entity "sortBy".
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3035)
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3029)
at org.apache.crimson.parser.Parser2.nextChar(Parser2.java:2951)
at
org.apache.crimson.parser.Parser2.parseLiteral(Parser2.java:715)
at
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1375)
at org.apache.crimson.parser.Parser2.content(Parser2.java:1700)
at
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1468)
at org.apache.crimson.parser.Parser2.content(Parser2.java:1700)
at
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1468)
at org.apache.crimson.parser.Parser2.content(Parser2.java:1700)
at
org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1468)
at
org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:499)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:304)
at
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:433)
at org.xml.sax.helpers.XMLReaderAdapter.parse(XMLReaderAdapter.java:223)
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:433)
at org.xml.sax.helpers.XMLReaderAdapter.parse(XMLReaderAdapter.java:223)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:317)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:108)
at org.apache.struts.digester.Digester.parse(Digester.java:755)
at
org.apache.struts.action.ActionServlet.initMapping(ActionServlet.java:1331)
at
org.apache.struts.action.ActionServlet.init(ActionServlet.java:465)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
[snip]
This kind of puzzled me, but I obeyed and replaced the ampersands with
semicolons. Now the parser shuts up, but as soon as I hit the specified
forward, struts seems to hang in a loop until it produces a
StackOverflowError
(details see below).
Can anybody help me with this and tell me how I specifiy a local forward
that
accepts parameters in the URI?
Thanks in advance, tom
2001-08-26 09:26:15 StandardWrapperValve[action]: Servlet.service() for
servlet action threw exception
javax.servlet.ServletException: Servlet execution threw an exception
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:219)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2251)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:446)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:984)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1074)
at java.lang.Thread.run(Thread.java:484)
----- Root Cause -----
java.lang.StackOverflowError
at java.lang.String.hashCode(String.java:1122)
at java.util.HashMap.put(HashMap.java:327)
at
org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:249)
at
org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:249)
at
org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:251)
at
org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:251)
[*** last message repeated several times]
--
thomas quas | "Art lies in the consciousness of doing the thing,
[EMAIL PROTECTED] | in the attention of the happening[...]"
| -- Allen Ginsberg --