2015-10-16 70 views
0

我試圖改變XPages應用程序中的頁面持久性,打算從「將頁面保留在內存中」改爲「僅保留當前頁面在內存中」。當然,我得到的運行時錯誤告訴我XPages不能序列化JavaScript函數。但是哪個功能?堆棧跟蹤只顯示標準的Java錯誤,但沒有關於哪個變量或函數不能被序列化?無法序列化JavaScript功能

我之前有過類似的問題,而且深入挖掘代碼並解決問題總是花費我很多時間。這需要很長的時間......我現在真的擁有它。

有沒有一種巧妙的方法來找出哪個函數不能被序列化?

UPDATE

什麼OpenLog記錄儀自帶了:

Client Version 
Release 9.0.1FP3 
January 12, 2015 
Database aalto803.nsf 
Agent /aASK.xsp 
Method class java.lang.StackTraceElement.writeValue 
Error Num - 
Error Line 364 
Error Msg Impossible de sérialiser une fonction JavaScript 
Language Java 

Stack Trace 
java.io.IOException: Impossible de sérialiser une fonction JavaScript 
at com.ibm.jscript.types.FBSValue.writeValue(FBSValue.java:364) 
at com.ibm.jscript.types.FBSDefaultObject.writeExternal(FBSDefaultObject.java:746) 
at com.ibm.jscript.std.ObjectObject.writeExternal(ObjectObject.java:106) 
at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1462) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) 
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.GeneratedMethodAccessor51.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:1020) 
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) 
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) 
+1

Domino XPage中的Java。 –

回答

0

的XPages OpenLog記錄儀不僅捕獲捕獲的異常(聽起來好像這是其中之一),而且還抓住哪個組件觸發問題。它在應用程序中需要一個錯誤XPage(否則在錯誤發生後沒有渲染響應階段運行,XPage OpenLog Logger將從其中檢索細節)。這可能會幫助你追蹤它。

否則,請檢查您存儲在viewScope中的函數等。這可能會幫助您縮小範圍。 SSJS並不是真正爲面向對象編程設計的,我認爲這是在將函數存儲在範圍中時出現問題的地方。

0

您的問題的答案不是很多WHICH函數不能被序列化,它的NONE函數可以被序列化。或者如果你想獲得非常技術性的東西,沒有人能夠以任何可靠的方式堅持下去。 SSJS並不意味着要序列化。在這篇博客文章中:http://xomino.com/2014/03/26/why-learning-javascript-is-more-critical-to-xpage-developers-than-java/關於序列化爲什麼以及哪裏有毒,特別是SSJS的評論中有一個很好的討論(你可以排除圍繞java vs JavaScript的博客文章的實際討論 - 只關注有關序列化)。

+0

我知道他們不能被序列化。這只是我必須在幾千行代碼中找到這個bug。有些是在3年前開發的,手動篩選它們並不是我最喜歡的消遣活動之一​​。有沒有一個isSerializable方法呢?它必須是viewScope變量中的某個東西,但是哪一個?跟蹤表示它正在序列化一個HashMap,我理解得很多,但是沒有什麼能告訴我哪個值是「錯誤的」? –