Menu

#97 Impossible to create the condition for consult the list

v4m3
closed
nobody
None
6
2010-03-25
2010-02-20
No

I have created a small self-contained example that produces the following warning when attempting to create a TestWall instance. It makes no sense to me, because "wall" is a member of *AbstractTestWallEntry*, so why is it looking for it in *AbstractTestWall* ? I don't understand how to fix this myself (atm).

Note: This example will probably not work unless the patch I have submitted for https://sourceforge.net/tracker/?func=detail&aid=2952988&group_id=123187&atid=695743 is applied first.

ERROR http-8080-2 org.openxava.tab.Tab - WARNING! Impossible to create the condition for consult the list
rg.openxava.util.ElementNotFoundException: The reference wall does not exist in AbstractTestWall
at org.openxava.model.meta.MetaModel.getMetaReference(MetaModel.java:396)
at org.openxava.model.meta.MetaModel.isCalculated(MetaModel.java:1116)
at org.openxava.mapping.ModelMapping.changePropertiesByColumns(ModelMapping.java:436)
at org.openxava.mapping.ModelMapping.changePropertiesByColumns(ModelMapping.java:404)
at org.openxava.tab.Tab.getSQLBaseCondition(Tab.java:147)
at org.openxava.tab.Tab.createCondition(Tab.java:335)
at org.openxava.tab.Tab.getCondition(Tab.java:312)
at org.openxava.tab.Tab.createTableModel(Tab.java:280)
at org.openxava.tab.Tab.getTableModel(Tab.java:266)
at org.apache.jsp.xava.list_jsp._jspService(list_jsp.java:747)
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.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.xava.editors.collectionEditor_jsp._jspService(collectionEditor_jsp.java:975)
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.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.xava.collection_jsp._jspService(collection_jsp.java:145)
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.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.xava.detail_jsp._jspService(detail_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.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.xava.core_jsp._jspService(core_jsp.java:248)
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 org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:120)
at org.openxava.web.servlets.Servlets.getURIAsString(Servlets.java:99)
at org.openxava.web.dwr.Module.getURIAsString(Module.java:185)
at org.openxava.web.dwr.Module.fillResult(Module.java:204)
at org.openxava.web.dwr.Module.request(Module.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)

Discussion

  • Sebastien Diot

    Sebastien Diot - 2010-02-20

    Example producing the warning.

     
  • Sebastien Diot

    Sebastien Diot - 2010-02-20

    Oops! Better remove the @Stereotype("LABEL") in TestWallEntry and TestWall.

    If I really try to create an instance, other errors come, probably resulting from the initial warning:

    ERROR http-8080-3 org.openxava.tab.impl.JDBCTabProvider - Der Spaltenindex 1 ist außerhalb des gültigen Bereichs. Anzahl Spalten: 0.
    org.postgresql.util.PSQLException: Der Spaltenindex 1 ist außerhalb des gültigen Bereichs. Anzahl Spalten: 0.
    at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:53)
    at org.postgresql.core.v3.SimpleParameterList.setLiteralParameter(SimpleParameterList.java:114)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.bindLiteral(AbstractJdbc2Statement.java:2143)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statement.java:1186)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1742)
    at org.postgresql.jdbc3g.AbstractJdbc3gStatement.setObject(AbstractJdbc3gStatement.java:37)
    at org.postgresql.jdbc4.AbstractJdbc4Statement.setObject(AbstractJdbc4Statement.java:46)
    at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)
    at org.openxava.tab.impl.JDBCTabProvider.getResultSize(JDBCTabProvider.java:327)
    at org.openxava.tab.impl.EntityTabDataProvider.getResultSize(EntityTabDataProvider.java:216)
    at org.openxava.tab.impl.EntityTab.getResultSize(EntityTab.java:560)
    at org.openxava.tab.impl.TableModelBean.getTotalSize(TableModelBean.java:276)
    at org.openxava.tab.impl.XTableModelDecoratorBase.getTotalSize(XTableModelDecoratorBase.java:87)
    at org.openxava.tab.Tab.getTotalSize(Tab.java:743)
    at org.apache.jsp.xava.list_jsp._jspService(list_jsp.java:748)
    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.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    ...

    ERROR http-8080-3 org.openxava.tab.impl.EntityTabDataProvider - Impossible to obtain the result size
    java.rmi.RemoteException: Impossible to obtain the result size
    at org.openxava.tab.impl.JDBCTabProvider.getResultSize(JDBCTabProvider.java:338)
    at org.openxava.tab.impl.EntityTabDataProvider.getResultSize(EntityTabDataProvider.java:216)
    at org.openxava.tab.impl.EntityTab.getResultSize(EntityTab.java:560)
    at org.openxava.tab.impl.TableModelBean.getTotalSize(TableModelBean.java:276)
    at org.openxava.tab.impl.XTableModelDecoratorBase.getTotalSize(XTableModelDecoratorBase.java:87)
    at org.openxava.tab.Tab.getTotalSize(Tab.java:743)
    at org.apache.jsp.xava.list_jsp._jspService(list_jsp.java:748)
    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.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
    at org.apache.jsp.xava.editors.collectionEditor_jsp._jspService(collectionEditor_jsp.java:975)
    ...

     
  • Javier Paniza

    Javier Paniza - 2010-02-25
    • priority: 5 --> 6
     
  • Sebastien Diot

    Sebastien Diot - 2010-03-09

    I tried to follow the problem in the debugger, but the code involves just too many classes which have unclear meaning to me. I will have to leave you this one...

     
  • Javier Paniza

    Javier Paniza - 2010-03-25
    • milestone: 1003317 --> v4m3
    • status: open --> closed
     
  • Javier Paniza

    Javier Paniza - 2010-03-25

    Sebastien,

    I added your test classes with slight modifications to OpenXavaTest, also I created a test class named WallTest, with the next method:
    public void testCollectionsOfGenericType() throws Exception {
    execute("Mode.detailAndFirst");
    assertCollectionRowCount("entries", 2);
    }

    Adding a to test database a Wall with 2 entries.
    I reproduced your problem, debug it, and fix it.
    The problem was in the addCollection() method of AnnotatedClassParser. There you have to change the next two lines:
    Class clazz = (Class) ((types[0] instanceof Class) ? types[0] : ((TypeVariable) types[0]).getGenericDeclaration());
    ref.setReferencedModelName( clazz.getSimpleName() );
    by the next ones:
    Class referencedModelClass = getGenericClass(model.getPOJOClass(), pd);
    if (referencedModelClass == null) {
    log.warn(XavaResources.getString("collection_not_added_not_generic_type", pd.getName(), model.getName()));
    return;
    }
    ref.setReferencedModelName(referencedModelClass.getSimpleName());

    Also it's needed to add the next method:
    private Class getGenericClass(Class finalClass, PropertyDescriptor pd) {
    java.lang.reflect.Type type = ((ParameterizedType) pd.getReadMethod().getGenericReturnType()).getActualTypeArguments()[0];
    if (type instanceof Class) return (Class) type;
    if (!(finalClass.getGenericSuperclass() instanceof ParameterizedType)) return null;
    ParameterizedType superClassType = (ParameterizedType) finalClass.getGenericSuperclass();
    int i=0;
    for (java.lang.reflect.Type t: finalClass.getSuperclass().getTypeParameters()) {
    if (t.equals(type)) {
    return (Class) superClassType.getActualTypeArguments()[i];
    }
    i++;
    }
    return null;
    }

    In this ways, your problem is solved, and all test suite works fine. Definitely introspection with generics used for generics is not so simple with Java.

     

Log in to post a comment.