Please help me with a DMI issue. This is best to explain by example. I am getting the following exception in my log:
Snip from .ds.xml:
valueXPath="site/id" mapping works when beans are declared like this:
BUT not like this using an abstract class, why? Is this a bug?
Thank you in advance
Code:
com.isomorphic.util.JXPathContextObjectFactory - Provided XPath has one or more null objects, attempt to create missing object failed. JXPathContext bean: net.cnsonline.air.model.view.FlightVO@19b2ca1, parent object: net.cnsonline.air.model.view.FlightVO@19b2ca1, property that creation failed: carrier, property index (in case of collection or array): 0 java.lang.Exception: Cannot instantiate interface. at com.isomorphic.util.JXPathContextObjectFactory.createObject(JXPathContextObjectFactory.java:235) at org.apache.commons.jxpath.ri.model.beans.PropertyPointer.createPath(PropertyPointer.java:171) at org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.createPath(BeanPropertyPointer.java:238) at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.createPath(JXPathContextReferenceImpl.java:523) at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.createPath(JXPathContextReferenceImpl.java:497) at com.isomorphic.datasource.DataSource.setProperties(DataSource.java:1744) at com.isomorphic.base.Reflection.adaptValue(Reflection.java:1526) at com.isomorphic.base.Reflection.adaptArgsAndInvoke(Reflection.java:899) at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:416) at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:64) at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2366) at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:215) at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:172) at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:137) at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:168) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
Code:
<field name="site" type="text" length="50" required="false" valueXPath="site/id" />
Code:
@XmlRootElement(name="flight")
public class FlightVO {
private AirsiteVO site;
public AirsiteVO getSite() {
return site;
}
public void setSite(AirsiteVO site) {
this.site = site;
}
}
Code:
@XmlRootElement(name="flight")
public class FlightVO extends AbstractConveyanceVO<AirsiteVO> {
}
public abstract class AbstractConveyanceVO<S extends AbstractSiteVO> {
protected S site;
public S getSite() {
return site;
}
public void setSite(S site) {
this.site = site;
}
}
Comment