近来做一个项目,用到了dwr,在调用spring中的service时,老是报错,
如下: 浏览器中页面错误:
服务器错误:
2008-5-18 16:55:48 org.directwebremoting.util.CommonsLoggingOutput warn 警告: Marshalling exception org.directwebremoting.extend.MarshallException: Error marshalling com.test.Man: com.test.Man. See the logs for more details. at org.directwebremoting.convert.BasicObjectConverter.convertInbound(BasicObjectConverter.java:151) at org.directwebremoting.dwrp.DefaultConverterManager.convertInbound(DefaultConverterManager.java:159) at org.directwebremoting.dwrp.BaseCallMarshaller.marshallInbound(BaseCallMarshaller.java:155) at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:44) 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:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.InstantiationException: com.test.Man at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.directwebremoting.convert.BasicObjectConverter.convertInbound(BasicObjectConverter.java:84) ... 21 more 2008-5-18 16:55:48 org.directwebremoting.util.CommonsLoggingOutput warn 警告: --Erroring: batchId[0] message[org.directwebremoting.extend.MarshallException: Error marshalling com.test.Man: com.test.Man. See the logs for more details.]
大概意思是接口不能被初始化。
检查原因:是所调用的service的方法有接口参数,而在javascript中参数包装方式是:object:{property:value},
更改为:var object = new interfaceImpl;即可。
在dwr,xml中需要定义出接口,和实现类的convert.
如:
<convert converter="bean" match="com.archives.core.Query" />
<convert converter="bean" match="com.archives.dwr.QueryImpl" />
在javascript中定义接口的实现类:
如:var query = new QueryImpl;
在调用service时,把上述实现类的对象传递到带有接口参数的方法中。
转载请标明出处:http://blog.youkuaiyun.com/hpujsj/archive/2008/05/18/2456186.aspx
参考:http://www.nabble.com/Using-Interface-as-method-parameter-td16506249.html