- 未記入
- ベテラン
- 会議室デビュー日: 2005/02/24
- 投稿数: 55
|
投稿日時: 2005-08-08 20:38
オブジェクトのデシリアライズを行っているときに
以下のエラーが発生しました。
対処法が分からないのでどうか助けてください。
コード: |
|
詳細メッセージ: java.io.NotSerializableException:org.apache.commons.dbcp.BasicDataSource
(スタックトレース)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
java.util.HashMap.writeObject(HashMap.java:958)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
up_down.DownLoadLogic.execute(DownLoadLogic.java:54)
system.DownLoadLogic.execute(DownLoadLogic.java:32)
jp.co.bs.panja.servlet.BaseServlet.doApplication(BaseServlet.java:107)
jp.co.bs.panja.servlet.PanjaServlet.doPost(PanjaServlet.java:253)
jp.co.bs.panja.servlet.PanjaServlet.doGet(PanjaServlet.java:217)
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
java.lang.Thread.run(Thread.java:536)
|
以下がデシリアライズする処理です。
ブラウザからアップロードしたファイルをデシリアライズしてます。
コード: |
|
InputStream in = null;
// ファイル情報の取り込み
try {
if (DiskFileUpload.isMultipartContent(request)) {
DiskFileUpload fu = new DiskFileUpload();
//最大ファイルサイズの指定
fu.setSizeMax(100000);
List fileItems = fu.parseRequest(request);
Iterator iter = fileItems.iterator();
//アップされるファイルは常に1つと仮定する
FileItem aItem = (FileItem)iter.next();
if (aItem.isFormField()) {
//通常のフォームデータならスルー
} else {
in = aItem.getInputStream();
ここでエラー ObjectInput oin = new ObjectInputStream(in);
Object o = oin.readObject();
if (o instanceof InputManager) {
InputManager im = (InputManager) o;
request.setAttribute(InputManager.BEAN_NAME, im);
}
}
}
} catch(FileUploadException ee) {
throw ee;
} finally {
if (in != null) {
in.close();
}
}
|
デシリアライズするInputManagerというクラスは
以下のようなメソッドがあります
例外にdhcpとかあるので関係あるのでしょうか?
コード: |
|
public class InputManager implements Serializable{
public InputManager(){}
public InputManager(ServiceEntity service, ServletConfig config) throws SQLException {}
public String getBackJsp(HttpServletRequest request) {}
public static InputManager getEvaluationManager(HttpServletRequest request) {}
|
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-08 20:43 ]
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-08 20:44 ]
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-09 09:17 ]
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-09 09:26 ]
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-09 09:36 ]
|
- かつのり
- ぬし
- 会議室デビュー日: 2004/03/18
- 投稿数: 2015
- お住まい・勤務地: 札幌
|
投稿日時: 2005-08-08 21:10
InputManagerのフィールドのインスタンスのフィールド・・・・と
遡って行くと、Serializableではないインスタンスがあるのでしょう。
それがDBCPのインスタンスってことです。
|
- あしゅ
- ぬし
- 会議室デビュー日: 2005/08/05
- 投稿数: 613
|
投稿日時: 2005-08-08 22:28
引用: |
| java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
easi.web.ict.up_down.DownLoadLogic.execute(DownLoadLogic.java:54)
|
例外の送出元がwriteObject()になっていますよ。
タイミングは逆シリアル化ではなくシリアル化では?
厳密にはフィールドのみとは限りませんが、
あとはかつのりさんの発言の通りでしょう。
|
- 山本 裕介
- ぬし
- 会議室デビュー日: 2003/05/22
- 投稿数: 2415
- お住まい・勤務地: 恵比寿
|
投稿日時: 2005-08-09 00:07
[ メッセージ編集済み 編集者: インギ 編集日時 2005-08-09 15:40 ]
|
- 未記入
- ベテラン
- 会議室デビュー日: 2005/02/24
- 投稿数: 55
|
投稿日時: 2005-08-09 09:38
> あしゅさん
逆シリアル化とシリアル化の両方でエラーが出てました。
貼り付けていたスタックトレースはシリアル化のほうでした。
コード: |
|
詳細メッセージ: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.apache.commons.dbcp.BasicDataSource
(スタックトレース)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1278)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
java.util.HashMap.readObject(HashMap.java:986)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:824)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1746)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
up_down.UploadLogic.execute(UploadLogic.java:64)
servlet.BaseServlet.doApplication(BaseServlet.java:107)
bs.panja.servlet.PanjaServlet.doPost(PanjaServlet.java:253)
javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
java.lang.Thread.run(Thread.java:536)
|
フィールドのみとは限らないとはどういうことでしょうか?
メソッドの引数や戻り値もSerializableである必要がありますか?
> インギさん
ご指摘どうもありがとうございました。
[ メッセージ編集済み 編集者: 未記入 編集日時 2005-08-09 09:40 ]
|
- あしゅ
- ぬし
- 会議室デビュー日: 2005/08/05
- 投稿数: 613
|
投稿日時: 2005-08-09 14:23
引用: |
| フィールドのみとは限らないとはどういうことでしょうか?
メソッドの引数や戻り値もSerializableである必要がありますか?
|
引数や戻り値は必要ないです。
厳密には、と書いたのは、void writeObject(ObjectOutputStream)などを
定義することでシリアル化をカスタマイズできるので、フィールド以外の
データも書き込まれる可能性がありえると。
あと、フィールドでもtransientなものは書き込まれません。
|
- 未記入
- ベテラン
- 会議室デビュー日: 2005/02/24
- 投稿数: 55
|
投稿日時: 2005-08-09 20:44
> あしゅさん
ありがとうございます。分かりました。
再度よくチェックした結果、
ご指摘のとおり、プロパティを辿れば、
いろいろなものを参照してました。
修正して試したところ、
うまく動きました。
どうもありがとうございました。
|