2016-11-23 13 views
0

У меня есть XPage, который содержит один документ Notes. Целью этой страницы является только показать некоторые соответствующие поля документа.XPAges: "java.io.NotSerializableException: lotus.domino.local.Document"

Доступ к первой странице страницы в порядке. А также при повторном показе без изменение подстилающего документа в порядке.

Но когда я перейти от этого к другому XPage, и изменить документ там (да, у меня есть другая страница, посвященная редактирования документа), а затем вернуться на страницу «шоу», я получаю java.io.NotSerializableException в фазе ответа рендеринга.

Странно: это для lotus.domino.local.Document ... Я не хочу, чтобы сохранить/сериализовать документ ...: -o

Что я сделал, чтобы найти ошибку в моем коде:

  1. Я зарегистрировал viewScope содержание в beforeRenderResponse Событие страницы, но есть только простые объекты (строки и булевы).
  2. Я установил viewState на страницу «nostate».
  3. Я установил атрибут только для чтения на страницу «true».
  4. я удалил каждый «на странице загрузки» данные-привязок (переключился «${...}» до «#{...}»)

Так что еще я могу сделать, чтобы найти точку кода, где какой-то документ хотите сохранить? Каковы типичные причины ошибки в этом случае?

Спасибо за любую помощь, чтобы помочь себе! :-)

Мои StackTrace:

23.11.16 10:30: Exception Thrown 
Context Path: /.../.../myApp.nsf 
Page Name: /page_ShowData.xsp 
com.ibm.xsp.FacesExceptionEx: java.io.NotSerializableException: lotus.domino.local.Document 
    at com.ibm.xsp.application.AbstractStateManager.saveSerializedView(AbstractStateManager.java:121) 
    at com.ibm.xsp.application.StateManagerImpl.saveSerializedView(StateManagerImpl.java:152) 
    at com.ibm.xsp.application.ViewHandlerExImpl._saveViewState(ViewHandlerExImpl.java:455) 
    at com.ibm.xsp.application.ViewHandlerExImpl.saveViewState(ViewHandlerExImpl.java:449) 
    at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:324) 
    at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:336) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103) 
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120) 
    at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:270) 
    at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:261) 
    at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157) 
    at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160) 
    at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) 
    at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:588) 
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:865) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:808) 
    at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:577) 
    at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319) 
    at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662) 
    at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482) 
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357) 
    at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313) 
    at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272) 
Caused by: java.io.NotSerializableException: lotus.domino.local.Document 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
    at java.util.ArrayList.writeObject(ArrayList.java:728) 
    at sun.reflect.GeneratedMethodAccessor652.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1059) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1502) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
    at java.util.HashMap.writeObject(HashMap.java:942) 
    at sun.reflect.GeneratedMethodAccessor637.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1059) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1502) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179) 
    at java.io.ObjectOutputStream.writeUnshared(ObjectOutputStream.java:413) 
    at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:438) 
    at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417) 
    at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417) 
    at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417) 
    at com.ibm.xsp.application.AbstractSerializingStateManager$FastObjectOutputStream.writeObjectEx(AbstractSerializingStateManager.java:417) 
    at com.ibm.xsp.application.AbstractSerializingStateManager.saveSerializedView(AbstractSerializingStateManager.java:294) 
    at com.ibm.xsp.application.AbstractSerializingStateManager.doSaveSerializedView(AbstractSerializingStateManager.java:269) 
    at com.ibm.xsp.application.FileStateManager.doSaveSerializedView(FileStateManager.java:290) 
    at com.ibm.xsp.application.FileStateManager.doSaveSerializedView(FileStateManager.java:270) 
    at com.ibm.xsp.application.AbstractStateManager.saveSerializedView(AbstractStateManager.java:114) 
    ... 25 more 

Мой page_ShowData.xsp:

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" pageTitle="Show Data" 
    xmlns:xc="http://www.ibm.com/xsp/custom" 
    xmlns:xe="http://www.ibm.com/xsp/coreex" readonly="true" 
    viewState="nostate" 
    afterPageLoad="#{javascript:print('page_ShowData.afterPageLoad()');}"> 
    <!-- ... --> 
    <xp:this.data> 
     <xp:dominoDocument var="stamm" formName="Masterdata" ignoreRequestParams="false"> 
      <xp:this.action> 
       <![CDATA[#{javascript: 
        // ensure to set the unid if known 
        if (viewScope.stammid == null){ 
         viewScope.stammid = param.get('documentId'); 
        } 

        if(typeof viewScope.stammid == "undefined" || viewScope.stammid == null || viewScope.stammid == ""){ 
         return; // empty means 'create' 
        } else { 
         return 'openDocument'; 
        } 
       }]]> 
      </xp:this.action> 
      <xp:this.documentId> 
       <![CDATA[#{javascript:return viewScope.stammid;}]]> 
      </xp:this.documentId> 


      <xp:this.postOpenDocument> 
       <![CDATA[#{javascript: 
        <!-- set some viewScope vars --> 
       }]]> 
      </xp:this.postOpenDocument> 

      <xp:this.postNewDocument> 
       <![CDATA[#{javascript: 
        <!-- set some viewScope vars --> 
       }]]> 
      </xp:this.postNewDocument> 
     </xp:dominoDocument> 
    </xp:this.data> 

    <!-- ... --> 

    <xp:this.beforeRenderResponse> 
    <![CDATA[#{javascript: 
     try{ 
      // print all viewScope vars 
      var vsKeys:java.util.Set = viewScope.keySet(); 
      for (var k in vsKeys){ 
       var v = viewScope.get(k); 
       print('viewScope - ['+k.toString()+'] (serializable='+(k instanceof java.io.Serializable)+') = ['+v+'] (instance='+(typeof v)+', serializable='+(v instanceof java.io.Serializable)+')'); 
      } 
    }]]> 

    </xp:this.beforeRenderResponse> 



    <!-- some UI content --> 

</xp:view> 

ответ

3

На одном из этих двух XPages вы храните NotesDocument (не DominoDocument источник данных, а объект NotesDocument) в переменной области. Объекты Domino не являются сериализуемыми, и это то, что бросает ошибку. Наиболее вероятным местом является страница, которую вы перемещаете. от.

Если вам нужен доступ к определенному документу, сохраните UNID документа в переменной области действия и используйте database.getDocumentByUNID() для его получения. Это почти то, что делает источник данных DominoDocument.

+0

Хорошо, спасибо за ваш комментарий. Я уже знал, что я не могу хранить NotesDocument в переменной с областью. Вот почему я регистрирую vs viewScope как первый шаг, чтобы найти ошибку. Но все vars являются логическими или строками ... И на самом деле я не хочу сохранять или кэшировать документ. Вопрос в том, как найти фрагмент кода, который помещает документ в область видимости ... Но вы дали хороший намек: я только посмотрел на свою страницу _target_ (только для чтения), возможно, мне нужно посмотреть мою страницу _source_ (редактируемый). Я напишу свои результаты позже здесь ... – Reeny

+1

Возможно ли, что это может быть некоторый UIControl или DataSource, который имеет вычисленное свойство, которое разрешает NotesDocument? т.е. вместо переменной области видимости. Возможно, ключ заключается в том, что writeObjectEx находится в пределах 6-й рекурсии, поэтому подумайте о чем-то, что около 6 в глубине области/области управления. Вы на 100% уверены, что ошибка указана на странице просмотра? Если вы переключаетесь с страницы редактирования, не будет ли страница редактирования сериализована? –

+0

So. Вы оба правы: ошибка появилась на странице _target_. Был выполнен индивидуальный контроль, сделанный коллегой. И у него был источник данных NotesDocument как (рассчитанный). Он нашел ошибку и сообщил об этом мне, прежде чем я выпрыгнул из окна :-) Спасибо за вашу помощь !!!! – Reeny