Ondra Žižka created WICKET-4785:
-----------------------------------

             Summary: Wicket + JBoss AS7: ClassNotFoundException: 
org.jboss.msc.service.ServiceName on deserialization
                 Key: WICKET-4785
                 URL: https://issues.apache.org/jira/browse/WICKET-4785
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.5.8
         Environment: JBoss AS 7.1.x
            Reporter: Ondra Žižka
            Priority: Critical


Wicket's serialization causes problems when deployed on JBoss AS 7.
AS 7 has the new higly modular architecture, which only makes relevant classes 
available to war's classloader.  org.jboss.msc.* is not amongst them.

I guess Wicket serializes this class because it traverses to it through CDI 
proxy's fields.
Then upon deserialization, it fails.

This is making Wicket unsuitable for production in AS 7, which is quite pity, 
since AS 7 is good impl of Java EE 6 with all the goodies like CDI; and also 
think about OpenShift.com which hosts on AS 7.

I have briefly discussed this with AS devs and they said this needs relatively 
simple fix in the serialization code. Or, maybe, a special serializer could be 
written for integration with AS 7.

ClassNotFoundException: org.jboss.msc.service.ServiceName from [Module 
"deployment.ROOT.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)

Steps to reproduce: 
* See http://test-ondra.rhcloud.com/
* Add some record, then go to / , refresh few times.
* Wicket will redirect you e.g. to /?4
* When you change that to a lower number, Wicket tries to get the old page 
state by deserializing.
* That's why it happens during deserialization.


{code}
Root cause:

java.lang.ClassNotFoundException: org.jboss.msc.service.ServiceName from 
[Module "deployment.ROOT.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at 
org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at 
org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at 
org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
at 
org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at 
org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at 
org.apache.wicket.application.AbstractClassResolver.resolveClass(AbstractClassResolver.java:108)
at 
org.apache.wicket.serialize.java.JavaSerializer$ClassResolverObjectInputStream.resolveClass(JavaSerializer.java:216)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1592)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at java.util.HashMap.readObject(HashMap.java:1047)
at java.lang.reflect.Method.invoke(Method.java:616)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:988)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1865)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at 
org.apache.wicket.serialize.java.JavaSerializer.deserialize(JavaSerializer.java:120)
at 
org.apache.wicket.pageStore.DefaultPageStore.deserializePage(DefaultPageStore.java:388)
at 
org.apache.wicket.pageStore.DefaultPageStore.getPage(DefaultPageStore.java:127)
at 
org.apache.wicket.page.PageStoreManager$SessionEntry.getPage(PageStoreManager.java:192)
at 
org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.getPage(PageStoreManager.java:327)
at 
org.apache.wicket.page.AbstractPageManager.getPage(AbstractPageManager.java:102)
at 
org.apache.wicket.page.PageManagerDecorator.getPage(PageManagerDecorator.java:50)
at 
org.apache.wicket.page.PageAccessSynchronizer$2.getPage(PageAccessSynchronizer.java:257)
at 
org.apache.wicket.DefaultMapperContext.getPageInstance(DefaultMapperContext.java:117)
at 
org.apache.wicket.request.handler.PageProvider.getStoredPage(PageProvider.java:292)
at 
org.apache.wicket.request.handler.PageProvider.isNewPageInstance(PageProvider.java:205)
at 
org.apache.wicket.request.mapper.AbstractBookmarkableMapper.mapHandler(AbstractBookmarkableMapper.java:349)
at 
org.apache.wicket.request.mapper.MountedMapper.mapHandler(MountedMapper.java:366)
at 
org.apache.wicket.request.mapper.CompoundRequestMapper.mapHandler(CompoundRequestMapper.java:157)
at org.apache.wicket.request.cycle.RequestCycle.mapUrlFor(RequestCycle.java:404)
at 
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:146)
at 
org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
at 
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:781)
at 
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
at 
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
at 
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
at 
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:185)
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:241)
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)
at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at 
org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
at 
org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:154)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
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:368)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
at java.lang.Thread.run(Thread.java:679)

Complete stack:

java.lang.RuntimeException: Could not deserialize object using: class 
org.apache.wicket.serialize.java.JavaSerializer$ClassResolverObjectInputStream
at 
org.apache.wicket.serialize.java.JavaSerializer.deserialize(JavaSerializer.java:137)
at 
org.apache.wicket.pageStore.DefaultPageStore.deserializePage(DefaultPageStore.java:388)
at 
org.apache.wicket.pageStore.DefaultPageStore.getPage(DefaultPageStore.java:127)
at 
org.apache.wicket.page.PageStoreManager$SessionEntry.getPage(PageStoreManager.java:192)
at 
org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.getPage(PageStoreManager.java:327)
at 
org.apache.wicket.page.AbstractPageManager.getPage(AbstractPageManager.java:102)
at 
org.apache.wicket.page.PageManagerDecorator.getPage(PageManagerDecorator.java:50)
at 
org.apache.wicket.page.PageAccessSynchronizer$2.getPage(PageAccessSynchronizer.java:257)
at 
org.apache.wicket.DefaultMapperContext.getPageInstance(DefaultMapperContext.java:117)
at 
org.apache.wicket.request.handler.PageProvider.getStoredPage(PageProvider.java:292)
at 
org.apache.wicket.request.handler.PageProvider.isNewPageInstance(PageProvider.java:205)
at 
org.apache.wicket.request.mapper.AbstractBookmarkableMapper.mapHandler(AbstractBookmarkableMapper.java:349)
at 
org.apache.wicket.request.mapper.MountedMapper.mapHandler(MountedMapper.java:366)
at 
org.apache.wicket.request.mapper.CompoundRequestMapper.mapHandler(CompoundRequestMapper.java:157)
at org.apache.wicket.request.cycle.RequestCycle.mapUrlFor(RequestCycle.java:404)
at 
org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:146)
at 
org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
at 
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:781)
at 
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
at 
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
at 
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
at 
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:185)
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to