Java Reflection API - ResultDataModel ?

Status
Nicht offen für weitere Antworten.

peeage

Neues Mitglied
tag zusammen ...

mit .......


Code:
Class c = Class.forName( "de.xxx.yyy.zzz.meineKlasse"  );

Method met = c.getMethod("getStr"  null);

Object returnValue = met.invoke(c.newInstance(), null);
								
writer.write(returnValue.toString());


.... kann ich aus der klasse "de.xxx.yyy.zzz.meineKlasse" die methode "getStr" aufrufen und mir den rückgabewert (returnValue = ein String) ausgeben lassen. wie schauts aber aus wenn die aufgerufene methode keinen string- oder integerwert zurück liefert, sondern wie zb. in meinem fall ein ResultDataModel ? ich bekomme dabei eine InvocationTargetException.
 
ich nicht, dann liegt es wohl an deinem Code, den du noch nicht gepostet hast?
und gibts nen StackTrace oder mehr Infos zur Exception? wenigstens die Zeile?

wenn du natürlich mehrere Code-Teile kompliziert verschachtelt in eine Zeile schreibst,
dann hilft die Zeilennummer alleine nicht weiter..

Code:
package test;

import java.lang.reflect.Method;

public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        Class c = Class.forName("test.MeineKlasse");
        Method met = c.getMethod("getStr", null);
        Object o = c.newInstance();
        Object returnValue = met.invoke(o, null);
        System.out.println(returnValue.toString());
    }
}

class MeineKlasse
{
    public ResultDataModel getStr()
    {
        return new ResultDataModel();
    }
}

class ResultDataModel
{
}
 
da gibts net viel code zu posten:

hier ein ausschnitt aus der klasse in welcher sich das ResultDataModel - Objekt befindet:

Code:
package de.xxx.yyy.zzz;

import java.util.*;
import javax.faces.model.ResultDataModel;

public class ConfUserBean {

[....]


            public ResultDataModel getDataList() {

                ArrayList params = new ArrayList();

                params.add(Day);

                params.add(getLoginBean().getClientID());

                params.add(getLoginBean().getUserID());

                setDataList( queryModel( Procedures.SP_CONF_USER_GET_CONFROOMS, params ) );

               

                return dataList;

            }

 

[....]

}



und hier der ausschnitt aus einer anderen klasse, in welcher auf den getter getDataList der klasse ConfUserBean zugegriffen wird:

Code:
[...]

public class UICalendar extends UIOutput{

      public void encodeBegin(FacesContext context) throws IOException {

            ResponseWriter writer = context.getResponseWriter();

            writer.startElement("div", this);
           

                  try {

                             Class c = Class.forName( "de.xxx.yyy.zzz" );

                                                    

                             Method met = c.getMethod("getDataList");

                             Object o = c.newInstance();

                             Object returnValue = met.invoke(o);


                             writer.write(returnValue.toString());

                            
                  }

                  catch ( Exception e ) {

                        int i;

                        StackTraceElement[] trace = e.getStackTrace();
   

                        for (i=0;i<trace.length-1;i++ ) {

                             writer.write(trace[i].toString());

                             writer.write( "\n" );    

                        }

                        writer.write( "ErrorMessage: " + e.toString() + "   StackTrace: " );

                  }

[...]


.. und zu guter letzt, der StackTrace:

Code:
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

de.voicerobots.VRO.user.webapp.confCalendar.UICalendar.encodeBegin(UICalendar.java:31)

javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:591)

javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:478)

org.apache.jsp.pages.conf_005fuser_005fmain_jsp._jspx_meth_conf_005fconfCalendar_005f0(conf_005fuser_005fmain_jsp.java:274)

org.apache.jsp.pages.conf_005fuser_005fmain_jsp._jspx_meth_f_005fview_005f0(conf_005fuser_005fmain_jsp.java:191)

org.apache.jsp.pages.conf_005fuser_005fmain_jsp._jspService(conf_005fuser_005fmain_jsp.java:146)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)

org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)

org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)

org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)

com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)

com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)

com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

de.voicerobots.vrWebAppBase.common.UploadFilter.doFilter(UploadFilter.java:57)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

ErrorMessage: java.lang.reflect.InvocationTargetException
 
die Exception wird auch (oder ausschließlich) geworfen, wenn bei der Abarbeitung der Operation eine Exception auftrat,
die bekommst du mit
getTargetException()
und kannst sie ausgeben,

zum testen versuche auch mal

Method met = c.getMethod("getDataList");
Object o = c.newInstance();
// Object returnValue = met.invoke(o);
MeineKlasse m = (MeineKlasse) o;
ResultDataModel model = m.getDataList()

also ein ganz normaler Aufruf der gleichen Operation,
dann müsste die gleiche Exception auftreten und du kannst sie auf normalen Wege sehen,
oder funktioniert
ResultDataModel model = m.getDataList()
and dieser Stelle ohne Probleme?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben