hallo zusammen,
mir liegt folgender code vor:
anmerkung: reflection verwendet ich nur, weil ich das ganze teil einer library ist, wo ist servlet-engine (javax.servlet)-abhängigkeit nicht aufgelöst ist. persönlich mag ich das gar nicht, libraries zu packen, wo abhängigkeiten zur beim kompilieren nicht aufgelöst werden können. dass meine strategie auch nachteile hat, braucht mir niemand zu erklären. z.b. die das problem warum ich hier nachfrage:
wenn ich meine methode in einem servlet verwende (doGet, doPost oder service-funktionen) funktioniert das. wenn ich die methode in einem JSP verwende (mit der request-"konstante"...) geht das nicht, dann erhalte ich folgende meldung:
java.lang.IllegalAccessException: Class com.aastra.ch.commons.http.debug.RequestAnalyzer can not access a member of class org.apache.catalina.core.ApplicationHttpRequest with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.aastra.ch.commons.http.debug.RequestAnalyzer.getFields(RequestAnalyzer.java:23)
at org.apache.jsp.WEB_002dINF.presentation.jsf.test.ERBDataJSP_jsp._jspService(ERBDataJSP_jsp.java:444)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at com.aastra.ch.commons.http.request.PageResolver.gotoPage(PageResolver.java:34)
at tests.jmarti.jsf.ERBDataServlet.processRequest(ERBDataServlet.java:59)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.myService(SLSDispatcher.java:321)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.doPost(SLSDispatcher.java:466)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.service(SLSDispatcher.java:353)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
...im moment kann ich nichts anderes machen, als die HttpServletRequest-instanz vom servlet her per request-dispatch (!) an das JSP weiterzuleiten, dort wieder zu holen und dann der getFields()-funktion mitzugeben...
grüsse, jan
mir liegt folgender code vor:
Java:
import java.util.Map;
import com.aastra.ch.commons.collections.sorting.SortMap;
@SuppressWarnings("unchecked")
public class RequestAnalyzer
{
public static void printFields(Object request)
{
System.out.println(RequestAnalyzer.getFields(request));
}
public static String getFields(Object request)
{
Map parameterMap = null;
final StringBuilder sb = new StringBuilder();
try
{
parameterMap = (Map) request.getClass().getMethod("getParameterMap").invoke(request, (Object[]) null);
}
catch (final Exception e)
{
e.printStackTrace();
}
final Map<String, String[]> sortedParameterMap = (Map<String, String[]>) SortMap.getTreeMapAsMap(parameterMap);
for (final Map.Entry<String, String[]> entry : sortedParameterMap.entrySet())
{
final String key = entry.getKey();
final String[] value = entry.getValue();
sb.append("Key: " + key + ", Value: " + value[0] + "\r\n");
}
return sb.toString();
}
}
anmerkung: reflection verwendet ich nur, weil ich das ganze teil einer library ist, wo ist servlet-engine (javax.servlet)-abhängigkeit nicht aufgelöst ist. persönlich mag ich das gar nicht, libraries zu packen, wo abhängigkeiten zur beim kompilieren nicht aufgelöst werden können. dass meine strategie auch nachteile hat, braucht mir niemand zu erklären. z.b. die das problem warum ich hier nachfrage:
wenn ich meine methode in einem servlet verwende (doGet, doPost oder service-funktionen) funktioniert das. wenn ich die methode in einem JSP verwende (mit der request-"konstante"...) geht das nicht, dann erhalte ich folgende meldung:
java.lang.IllegalAccessException: Class com.aastra.ch.commons.http.debug.RequestAnalyzer can not access a member of class org.apache.catalina.core.ApplicationHttpRequest with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.aastra.ch.commons.http.debug.RequestAnalyzer.getFields(RequestAnalyzer.java:23)
at org.apache.jsp.WEB_002dINF.presentation.jsf.test.ERBDataJSP_jsp._jspService(ERBDataJSP_jsp.java:444)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at com.aastra.ch.commons.http.request.PageResolver.gotoPage(PageResolver.java:34)
at tests.jmarti.jsf.ERBDataServlet.processRequest(ERBDataServlet.java:59)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.myService(SLSDispatcher.java:321)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.doPost(SLSDispatcher.java:466)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.service(SLSDispatcher.java:353)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)
...im moment kann ich nichts anderes machen, als die HttpServletRequest-instanz vom servlet her per request-dispatch (!) an das JSP weiterzuleiten, dort wieder zu holen und dann der getFields()-funktion mitzugeben...
grüsse, jan