在 jBoss 6.2 与 jBoss 7.3 中部署应用程序时的不同响应

Posted

技术标签:

【中文标题】在 jBoss 6.2 与 jBoss 7.3 中部署应用程序时的不同响应【英文标题】:Different response when application deployed in jBoss 6.2 vs jBoss 7.3 【发布时间】:2021-10-17 05:46:49 【问题描述】:

我们最近将 jBoss EAP 从 6.2 升级到了 7.3.0。

升级后,我们观察到应用程序开始出现异常行为。我们正在使用 Spring 框架版本 - 4.1.9.RELEASE。

例如:

@RestController
public class CommonController

@RequestMapping(value = "/rest/report/testResponse", method = RequestMethod.GET)
    public @ResponseBody List<Entry<String, Number>> getData()
        List<Entry<String, Number>> technologyList = new ArrayList<>();
        SimpleEntry<String, Number> simpleEntry1 = new AbstractMap.SimpleEntry<String,Number>("Java",1);
        SimpleEntry<String, Number> simpleEntry2 = new AbstractMap.SimpleEntry<String,Number>("Spring",2);
        technologyList.add(simpleEntry1);
        technologyList.add(simpleEntry2);
        return technologyList;
    

在 jBoss 6.2 中部署应用程序时我得到的响应是:

[

"key": "Java",
"value": 1
,

"key": "Spring",
"value": 2

]

现在在 jBoss 7.3 中部署应用程序时我得到的响应是:

[

    "Java": 1
, 

    "Spring": 2

]

如您所见,上述两个响应存在细微差别。这破坏了我的前端代码,我们使用了下面的 javascript 代码,因为现在在 jBoss7 中,我们没有得到带有键/值前缀的响应:

<ui-select-choices repeat="obj.value as obj in  technologyList |  orderBy:'key'">
   <div class ="small" ng-bind-html="obj.key" title ="obj.key"></div>
</ui-select-choices>

我们无法修改后端/前端代码,因为该应用程序已经在生产环境中运行,并且无法在许多地方更改代码。我们只是想升级jBoss版本。

任何人都遇到过类似的问题,请评论/建议解决方案。

【问题讨论】:

如果你不能改变你的代码,那么唯一的选择就是使用一个不同的 jboss 版本,你的代码仍然可以工作。不完全确定版本之间发生了什么变化。但我假设spring(或jboss)使用了一个新的jackson版本,他们明确地将Map.Entry转换为[key]: [value]而不是"key": [key], "value": [value] 另请参阅:Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? 感谢@Lino 指出问题中的问题 - 无需在问题中添加“紧急/尽快”等形容词。我将立即编辑我的问题,并牢记以后不要这样做。 还有一个相关的问题:Issue when serializing Map.Entry using jackson,如果你可以将jackson-databind版本调整为以前使用的版本,那么你可以留在jboss 7上 【参考方案1】:

这是杰克逊默认用于序列化的问题。

这里是 release 当更改被带到杰克逊时。 Jackson 2.5

的兼容性问题中也提到了您面临的问题

JBoss 7.3 可能带有一个已经包含的 jackson 库,所以这就是您受到影响的地方。在这里查看如何exclude provided Jackson from JBoss 7

然后用早于 2.5 的 jackson 库打包您的应用程序并再次部署它。

【讨论】:

以上是关于在 jBoss 6.2 与 jBoss 7.3 中部署应用程序时的不同响应的主要内容,如果未能解决你的问题,请参考以下文章

在 JBoss EAP 6.2 中无法通过 SSL 连接到 SOAP 服务

如何更新jboss EAP -6.2中的JSP / JS而无需重新启动或重新部署构建

JBoss EAP 6.2 CDI beans.xml

JBoss EAP 7.3 上的 Primefaces 6 文件上传问题

动态配置 JBOSS ( eap 6.2 ) 数据源

javax.jms.TransactionInProgressException: 无法在 JBoss EAP 6.2 和 Active MQ 5.10.0 上的 XASession 中回滚()