我只想知道我们如何“序列化”Jdbc4SQLXML
类,它是扩展java.lang.Object
并根据postgres API实现java.sql.SQLXML
。甚至SQLXML接口也没有扩展Serializable接口。
为什么这样做,我试图从其他JVM获取一个对象,那时候得到这个异常。
java.io.NotSerializableException: org.postgresql.jdbc4.Jdbc4SQLXM
L。
这里SQLXML是我的返回类型。
提前致谢。
答案 0 :(得分:1)
Jdbc4SQLXML
不是Serializable,因为它实现的界面不是Serializable,规范并不需要它。这有一个很好的理由:JDBC的SQL / XML支持允许是" lazy",其中SQL / XML结果的JDBC对象实际上只是指向数据的指针在数据库中,它是按需提取的。这也是结果集关闭后结果对象无效的原因。
因此,虽然PgJDBC可以使这个对象可序列化,因为它不会懒得加载,但这意味着我们以后永远不能将其更改为延迟加载。
如果要序列化XML,请使用标准SQL / XML方法从结果对象中读取XML并序列化生成的XML。不要尝试直接序列化JDBC结果对象。
见the JDBC tutorial。您将看到如何从结果对象中获取Document
。 Document
可序列化。
答案 1 :(得分:0)
如果某个类没有实现序列化,则无法通过常规api发送它。您可以使用自己的序列化程序(使用getter / setter或Java反射来进入其他非公共字段);然后通过Web服务器发送字符串,并在另一侧执行相反的操作。基本上是你自己的序列化。但是有些软件包可以帮助{7}} Java 7也有内置帮助程序
重要的问题可能是你想要这样做的原因?如果在Jvm 1中打开了一些资源,则此对象可能在Jvm 2中失败。
为什么不制作自己的POJO并使用它来重新创建对象?
如果在将来的版本中发生变化,这将保护 - 如果此第三方对象中的某些内容发生了变化,并不是为了序列化。