getObjectProperty 在 Artemis 中的工作方式与 Classic 不一样?

问题描述 投票:0回答:1

我知道从安全角度来看,这种方法在 ActiveMQ Classic 中是不安全的。但是,在尝试执行以下操作时,将 ActiveMQ Artemis v2.32.0 与 ActiveMQ Classic 5.16.0 客户端结合使用会导致

ClassCastException

Map<String, String> map = genericCast(message.getObjectProperty(key))

它无法将

String
投射到
Map

与经典经纪商交互时,现有的客户端代码完全可以正常工作。

我不确定这是否是预期的行为,但我找不到明确的记录。如果不是预期的行为,我可以进一步查看是否可以为其编写测试用例。

activemq-artemis
1个回答
0
投票

您正在看到预期的行为。正如 JavaDoc 中针对

Message
所指出的:

getObjectProperty
方法仅返回类
Boolean
Byte
Short
Integer
Long
Float
Double
String
类的值。

请注意,这不包括

Map

ActiveMQ Classic 支持这种行为的能力是 扩展,ActiveMQ Artemis 中并未引入。

一般来说,这样的扩展并不是一个好主意,因为它们会诱使开发人员破坏应用程序的可移植性。在许多情况下,这是长期损失的短期收益。在这种特定情况下,消息本身可以充当一种

Map
,因为您可以设置各种类型的键/值对,因此可能不需要首先将
Map
设置为属性。

© www.soinside.com 2019 - 2024. All rights reserved.