Hello,
I am successfully receiving a complex bean/POJO at the client but am
getting errors in trying to marshall/pass the JavaScript
representation back to a remoted method on the server. The specific
error is
uk.ltd.getahead.dwr.ConversionException: Error converting parameters for call to
PersonController.updatePerson: com.ihg.peopledb.admin.Person
at uk.ltd.getahead.dwr.impl.ExecuteQuery.execute(ExecuteQuery.java:139)
at uk.ltd.getahead.dwr.impl.DefaultExecProcessor.handle(DefaultExecProce
ssor.java:48)
at uk.ltd.getahead.dwr.impl.DefaultProcessor.handle(DefaultProcessor.jav
a:83)
at uk.ltd.getahead.dwr.AbstractDWRServlet.doPost(AbstractDWRServlet.java
:162)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: uk.ltd.getahead.dwr.ConversionException: com.ihg.peopledb.admin.Perso
n
at uk.ltd.getahead.dwr.convert.BeanConverter.convertInbound(BeanConverte
r.java:262)
at uk.ltd.getahead.dwr.impl.DefaultConverterManager.convertInbound(Defau
ltConverterManager.java:162)
at uk.ltd.getahead.dwr.impl.ExecuteQuery.execute(ExecuteQuery.java:135)
... 19 more
Caused by: java.lang.InstantiationException: com.ihg.peopledb.admin.Person
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at uk.ltd.getahead.dwr.convert.BeanConverter.convertInbound(BeanConverte
r.java:180)
... 21 more
- Erroring: id[7307_1150297539329] message[uk.ltd.getahead.dwr.OutboundVariable@
d93a3f]
Here is the setup:
##### dwr.xml
<dwr>
<allow>
<create creator="new" javascript="SearchController">
<param name="class" value="com.ihg.peopledb.admin.SearchController"/>
</create>
<create creator="new" javascript="PersonController">
<param name="class" value="com.ihg.peopledb.admin.PersonController"/>
</create>
<convert converter="bean" match="com.ihg.peopledb.admin.PersonListItem"/>
<convert converter="bean" match="com.ihg.peopledb.admin.Person"/>
<convert converter="bean" match="com.ihg.peopledb.admin.Location"/>
<convert converter="bean" match="com.ihg.peopledb.admin.Contact"/>
</allow>
</dwr>
####
#### JSP
<%-- DWR scripts --%>
<script type='text/javascript'
src='/peopledb/dwr/interface/SearchController.js'></script>
<script type='text/javascript'
src='/peopledb/dwr/interface/PersonController.js'></script>
<script type='text/javascript' src='/peopledb/dwr/engine.js'></script>
<script type='text/javascript' src='/peopledb/dwr/util.js'></script>
...
var person = { locs:null, contacts:null, personID:-1, salutation:null,
firstName:null, middleName:null,
lastName:null, suffixName:null, localName:null, prefName:null,
picture:null, employeeID:null, userID:null,
email:null, dob:null, lang1:null, lang2:null, gender:null,
ethnicGroup:null,
ethnicOrigin:null, sourceSys:null, sourceSysID:null, userStatus:null,
primaryLoc:-1,
primaryContact:-1, lastUpdate:null, dept:null, userType:null,
workGroup:null };
...
function updatePerson() {
PersonController.updatePerson(setStatusResult, person);
}
#####
#### Person.java
...
import com.ihg.peopledb.admin.Location;
import com.ihg.peopledb.admin.Contact;
public class Person {
private static Context ctx = null;
private static Context envCtx = null;
private static DataSource ds = null;
// maps to store person's location(s) and contact(s)
private Map locs = new TreeMap();
private Map contacts = new TreeMap();
// from PERSON table
private int personID =-1;
private String salutation = null;
private String firstName = null;
private String middleName = null;
private String lastName = null;
private String suffixName = null;
private String localName = null; // unicode value
private String prefName = null;
private String picture = null;
private String employeeID = null;
private String userID = null;
private String email = null;
private Date dob = null;
private String lang1 = null;
private String lang2 = null;
private String gender = null;
private String ethnicGroup = null;
private String ethnicOrigin = null;
private String sourceSys = null;
private String sourceSysID = null;
private String userStatus = null;
// stores IDs of primary location record and contact record respectively
private int primaryLoc= -1;
private int primaryContact = -1;
private Date lastUpdate = null;
//...
// getters working fine!
// setters not working
public void setID(int personID) {
this.personID = personID;
}
public void setSalutation(String salutation) {
this.salutation = salutation;
}
//....
public void setLocs(Map locs) {
this.locs.putAll(locs);
}
public void setContacts(Map contacts) {
this.contacts.putAll(contacts);
}
}
#####
Note that I have different additional attributes in my JavaScript
object than I do in my Java POJO - and vice versa. But, I only have
setters on the POJO for the attributes that match. Does the JavaScript
object need to match exactly to the attributes in the POJO? Do I need
signatures for the "locs" and "contacts" parameters? They themselves
are POJOs which are setup as bean converters per above. I have NOT put
getters/setters on the Location and Contact POJO as I did not need
them for the "retrieval" but I now guess I need them in order to set
it correct? I would appreciate any help as I'm sure it is a
config/signature issue.
Thanks!!
Brian