Tomcat + Struts + Oracle

Hallo,

ich habe eine Suchmaske erstellt, in dem ich den Inhalt der Felder an Variblen übergebe und diese (per ActionMapping / Struts) zu Java schicke und danach wird in Java mit diesen Variablen, als Übergabeparameter, in Oracle eine Stored Procedure ausgeführt. Funktioniert soweit auch, aber wenn ich versuche Wildcards zu benutzen bekomme ich folgende Fehlermeldung:

java.io.CharConversionException: EOF

Da es nicht bei allen Sonderzeichen passiert, sondern nur bei bestimmten (getestet habe ich „%“ und „*“), verstehe ich nicht wirklich warum es dazu kommt bzw. wie ich es fixen kann.
In Java kommt für die entsprechende Variable schon ein NULL Value an, weswegen ich davon ausgehen, dass die Fehlermeldung von Struts kommt.
Ich muß irgendwie die Wildcards übergeben,da es sich um sehr große Listen handelt und es auch kritische Daten sind, die nicht immer alle auf einmal angezeigt werden sollen.

Vielen Dank für eure Hilfe!

Gruß
Alexander

Hallo,

verstehe ich das Problem richtig?
Du hast eine seite.jsp, auf der ein HTML-Formular ist. Diese Seite schickt das ganze dann per Senden-Button zu einem Servlet, welches dann damit eine Oracle Stored Procedure lostreten soll. Servlet und JSP-Seite wurden mit Struts gemacht.

Ist das richtig so?
Interessant wären allerdings noch die Tomcat- und Struts-Versionsnummern.

Procedure ausgeführt. Funktioniert soweit auch, aber wenn ich
versuche Wildcards zu benutzen bekomme ich folgende
Fehlermeldung:

java.io.CharConversionException: EOF

Nun. Das ist eine Exception die bei der Umwandlung von Chars von einem Characterset in ein anderes passieren kann. Ich tippe mal, dass er hinter dem ‚%‘ oder ‚*‘ noch etwas erwartet, weil in HTML ist das %-Zeichen z.B. ein Escape-Character. Daher das „EOF“.

Auf jeden Fall bräuchte man erstmal mehr Infos. Hast du denn keinen Stacktrace des Fehlers, wo drin steht in welcher Klasse er wo passiert?

Und hast du schon mal probiert, den Sende-Typ des HTML-Formulars zu ändern. Also falls du GET benutzt hast, mal POST zu benutzen oder anders rum.

Will sagen:

Da es nicht bei allen Sonderzeichen passiert, sondern nur bei
bestimmten (getestet habe ich „%“ und „*“), verstehe ich nicht
wirklich warum es dazu kommt bzw. wie ich es fixen kann.

Wie gesagt: ich tippe mal, dass es sich bei beiden um Escape-Zeichen handelt und daher erwartet er hinter diesen Zeichen noch etwas. Es kommt aber nichts, daher der EOF-Conversion-Error.

In Java kommt für die entsprechende Variable schon ein NULL
Value an, weswegen ich davon ausgehen, dass die Fehlermeldung
von Struts kommt.

Möglich, bzw das ist sehr wahrscheinlich. Auch Tomcat könnte noch in Frage kommen. Da gabs nämlich schon mal so einen Bug bei JSPs.
http://issues.apache.org/bugzilla/show_bug.cgi?id=3986

mfg
deconstruct

Hi deconstruct,

Ja, das verstehst du richtig.
Struts 1.1 und Tomcat 4.1.27-32

Leider weiß ich nicht, wo ich in Struts „Get“ und „Post“ ändern kann.

Ist das ein Stacktrace?:

java.io.CharConversionException: EOF
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:119)
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:87)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:428)
at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:515)
at org.apache.tomcat.util.http.Parameters.handleQueryParameters(Parameters.java:298)
at org.apache.coyote.tomcat4.CoyoteRequest.parseRequestParameters(CoyoteRequest.java:1933)
at org.apache.coyote.tomcat4.CoyoteRequest.getParameter(CoyoteRequest.java:911)
at org.apache.coyote.tomcat4.CoyoteRequestFacade.getParameter(CoyoteRequestFacade.java:178)
at org.apache.jsp.probe_suchen_jsp._jspService(probe_suchen_jsp.java:125)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)

Ich werd mir das mit dem Bug schon mal durchlesen.

Gruß
Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ja, das verstehst du richtig.
Struts 1.1 und Tomcat 4.1.27-32

Leider weiß ich nicht, wo ich in Struts „Get“ und „Post“
ändern kann.

Kannst du hier nachlesen:
http://jakarta.apache.org/struts/userGuide/struts-ht…

Ist das ein Stacktrace?:

Ja :wink:

at
org.apache.jsp.probe_suchen_jsp._jspService(probe_suchen_jsp.java:125)

Was passiert an dieser Stelle in deinem JSP?
Dazu musst du aber in die kompilierte Version deiner JSP schauen, also in die Datei ‚probe_suchen_jsp.java‘

mfg
deconstruct

Nachtrag
Hallo,

Leider weiß ich nicht, wo ich in Struts „Get“ und „Post“
ändern kann.

Kannst du hier nachlesen:
http://jakarta.apache.org/struts/userGuide/struts-ht…

Auch ein ändern der Property „enctype“ könnte vielleicht dein Problem beheben.

mfg
deconstruct

Hallo,

Hallo,

Ja, das verstehst du richtig.
Struts 1.1 und Tomcat 4.1.27-32

Leider weiß ich nicht, wo ich in Struts „Get“ und „Post“
ändern kann.

Kannst du hier nachlesen:
http://jakarta.apache.org/struts/userGuide/struts-ht…

Wo muß man dies eintragen? Im ActionMapping oder im Form?

Ist das ein Stacktrace?:

Ja :wink:

at
org.apache.jsp.probe_suchen_jsp._jspService(probe_suchen_jsp.java:125)

Was passiert an dieser Stelle in deinem JSP?

String strASuche = (String) request.getParameter(„selectedASuche“);

Das passiert dort. Er ließt den Variablenwert aus dem Feld es Formulars.

Gruß
Alex

Dazu musst du aber in die kompilierte Version deiner JSP
schauen, also in die Datei ‚probe_suchen_jsp.java‘

mfg
deconstruct

Hallo,

Kannst du hier nachlesen:
http://jakarta.apache.org/struts/userGuide/struts-ht…

Wo muß man dies eintragen? Im ActionMapping oder im Form?

Du trägst das auf deinem JSP-Form ein, also etwa

Aber die Methode umzustellen bringt nichts, hab ich gerade gelesen. Eventuell hilft aber ein Umstellen des Encodings mit enctype.
Das ganze schein ein Bug in Tomcat zu sein. Ich hab nämlich grad den betreffenden Bugreport gefunden:
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21018

Eventuell hilft auch eine andere Tomcat-Version. Probier mal die 4.1.29 (eventuell auch eine ältere, als du bisher hast) oder - falls das für dich eine Option ist - könntest du auch mal den Tomcat5 testen.

org.apache.jsp.probe_suchen_jsp._jspService(probe_suchen_jsp.java:125)

Was passiert an dieser Stelle in deinem JSP?

String strASuche = (String)
request.getParameter(„selectedASuche“);

Dann kann Struts nichts dafür. Das ist ein Tomcat-Problem.

mfg
deconstruct

DANKE!
Hi,

danke nochmal für die Mühe die du dir gemacht hast!!!

Gruß
Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]