Hi all,

I have a problem serializing a ValueComposite when I pass it from one page
to another in Wicket. Wicket is checking if the properties of the
ValueComposite are serializable, and somewhere in the process (that's where
I get lost) we have a runtime.value.ValueInstance which is not a
Serializable. Since a ValueComposite is Serializable, shouldn't the
ValueInstances be so too?  Shouldn't Wicket be able to serialize my
UserEntityDTO, or am I missing something basic?

I think Niclas was working around this issue in
http://old.nabble.com/ValueComposites-are-not-%27type-proxied%27-like-other-Composites.-td22072609.html#a22072609

Thanks for any comments...

Cheers,
Marc
===========================
ERROR org.apache.wicket.util.lang.Objects - Error serializing object class
info.musicianworld.UserListPage [object=[Page class =
info.musicianworld.UserListPage, id = 0, version = 0]]
org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException:
Unable to serialize class: org.qi4j.runtime.value.ValueInstance
Field hierarchy is:
  0 [class=info.musicianworld.UserListPage, path=0]
    private java.lang.Object org.apache.wicket.MarkupContainer.children
[class=info.musicianworld.UserListPage$2, path=0:users]
      private java.lang.Object org.apache.wicket.MarkupContainer.children
[class=org.apache.wicket.markup.html.list.ListItem, path=0:users:0]
        private java.lang.Object org.apache.wicket.MarkupContainer.children
[class=[Ljava.lang.Object;]
          java.lang.Object org.apache.wicket.Component.data[1]
[class=info.musicianworld.UserListPage$2$1, path=0:users:0:edit]
            final info.musicianworld.resource.dto.UserEntityDTO
info.musicianworld.UserListPage$2$1.val$userDTO [class=$Proxy16]
              protected java.lang.reflect.InvocationHandler
java.lang.reflect.Proxy.h [class=org.qi4j.runtime.value.ValueInstance]
<----- field that is not serializable
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:346)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538)
        at
org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615)
        at
org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538)
        at
org.apache.wicket.util.io.SerializableChecker.writeObjectOverride(SerializableChecker.java:684)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:298)
        at
org.apache.wicket.util.io.IObjectStreamFactory$DefaultObjectStreamFactory$2.writeObjectOverride(IObjectStreamFactory.java:129)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:298)
        at 
org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java:1124)
        at
org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage(AbstractPageStore.java:203)
        at
org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage(DiskPageStore.java:840)
        at
org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put(SecondLevelCacheSessionStore.java:332)
        at org.apache.wicket.Session.requestDetached(Session.java:1400)
        at org.apache.wicket.RequestCycle.detach(RequestCycle.java:1176)
        at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1454)
        at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
        at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
        at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312)
        at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
        at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
        at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.io.NotSerializableException:
org.qi4j.runtime.value.ValueInstance
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
        at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
        at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
        at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
        at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
        at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1251)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)
        at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
        at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
        at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
        at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
        at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
        at 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
        at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
        at
org.apache.wicket.util.io.IObjectStreamFactory$DefaultObjectStreamFactory$2.writeObjectOverride(IObjectStreamFactory.java:121)
        ... 26 more
===========================
public class UserListPage extends BaseWebPage
{
   public UserListPage()
   {
      @SuppressWarnings( "unchecked" )
      IModel model = new LoadableDetachableModel()
      {
         @Override
         protected List<UserEntityDTO> load()
         {
            ValueBuilder<UserEntityDTO> builder = vbf().newValueBuilder(
UserEntityDTO.class );
            builder.prototype().name().set( "some value" );
            UserEntityDTO user = builder.newInstance();

            List<UserEntityDTO> users = new ArrayList<UserEntityDTO>();
            users.add( user );
            return users;
         }
      };

      add( new ListView<UserEntityDTO>( "users", model )
      {
         @Override
         protected void populateItem( ListItem<UserEntityDTO> item )
         {
            final UserEntityDTO userDTO = item.getModelObject();

            item.add( new Label( "name", userDTO.name().get() ) );
            item.add( new Link( "edit" )
            {
               public void onClick()
               {
                  setResponsePage( new UserEditPage( userDTO ) );
               }
            } );
         }
      } );
   }
}

public interface UserEntityDTO extends ValueComposite
{
   Property<String> name();
}
-- 
View this message in context: 
http://old.nabble.com/ValueInstance-Serializable--tp29304031p29304031.html
Sent from the Qi4j-dev mailing list archive at Nabble.com.


_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to