【问题标题】:Need to know Class of a Byte Array saved in MySQL Database需要知道保存在 MySQL 数据库中的字节数组的类
【发布时间】:2014-07-19 02:41:16
【问题描述】:

我遇到了奇怪的问题。

我有一个jbpm5.3 Web 面板,我正在尝试通过操作 mysql 数据库在 servlet 中创建 Web 服务。我已经做了所有的事情,但卡在一个字节数组中。 此 Web 面板使用一个表 workiteminfo,它在其中保存所有详细信息并使用此字节数组进行进一步处理。

我的问题是我没有关于这个字节数组的信息,但我知道这个字节数组是一个未知类的对象。 如果我有这个类骨架,我的问题就解决了。

我在这里给出该表的屏幕截图, NULL 条目来自我的代码 :(

http://s9.postimg.org/hbgz6kar3/issue.png

我尝试过的:

  1. 使用的随机字节数组 [未使用]
  2. 使用了另一行的字节数组 [Web 面板发疯了]
  3. 我什至无法更改 Web 面板代码中的任何一行,一切都需要在我的最后完成。

请大家帮帮我,我可以用什么方法来解决这个问题?

【问题讨论】:

  • 存储在 blob 中的对象的类很可能是私有的,在这种情况下你完全不走运。

标签: mysql sql serialization bytearray jbpm


【解决方案1】:

jBPM 使用protobuf 序列化工作项数据。它不使用常见的 java 序列化。

如果您想为 jBpm 添加一些工作项,您可以使用一个 UserTask 或类似的东西启动 jBpm 工作流。

【讨论】:

  • 是的.. 最后我不得不将 jBPM 集成到我的网络服务中
【解决方案2】:

不知道你想做什么,但是嘿,我是谁来评判你;) ByteArray 不能反序列化为任何 java 类,因为它不仅仅是 1 个序列化对象。事实上,它似乎是4个或更多。 正如 Fernando 提到的,jbpm 使用 protobuf 来反序列化它自己的状态。在 5.3 版本中,Serializer 的实现是这样的:

https://github.com/droolsjbpm/drools/blob/5.3.x/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java#L1067

您可以在那里看到 writeWorkItem 方法是如何实现的。 OutputMarshaller 的类似类是 InputMarshaller:

https://github.com/droolsjbpm/drools/blob/5.3.x/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java#L1132

此类包含一个 readWorkItem 方法,该方法知道如何将字节数组编组为 WorkItem class

序列化是从WorkItemInfo class触发的。

一个想法可能是使用这个类来反序列化整个表。

希望对你有帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2019-12-21
    • 2018-01-16
    相关资源
    最近更新 更多