gpt4 book ai didi

java - 在 JPOS 中放置自定义逻辑的正确位置是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:46 28 4
gpt4 key购买 nike

我在一个项目中工作,其中一个请求(ISO 8583)需要通过JPOS服务器通过SOAP发送到支持(根据官方文档的远程主机)应用程序接口(interface)。

我们已经实现了我们的系统如下:

enter image description here

我们在中间件(spring boot 项目)中实现了一个 ISOListner,它将传入的 ISO 消息 转换为 SOAP 请求。

是否可以将中间件代码嵌入到 JPOS 服务器本身并省略 mw?

如果可能,放置转换逻辑的正确位置是什么?是 ChannelAdaptor 还是 TransactionManager

很少有博客建议我们可以将所有逻辑放在 TransactionManager 或 ChannelAdaptor 中。如果是真的那么我们为什么需要多路复用器和 channel 呢?或者我们的架构可以进一步进行?

最佳答案

为了完整起见,我将包括在 jPOS 用户组 ( https://groups.google.com/forum/#!topic/jpos-users/PGzb4syQRzs ) 中也提出的这个问题的答案:

We usually implement a custom participant doing the SOAP/REST thing.

In the case of REST, we use Apache's HTTP Client (org.apache.httpcomponents:httpclient:4.5.5) that provides a nice async interface that works great with the TransactionManager's PAUSE.

Here is an example:

public int prepare (long id, Serializable o) {
Context ctx = (Context) o;
String url = getURL (ctx);
HttpPost post = new HttpPost(url);
StringEntity entity = new StringEntity(ctx.getString(JSON_REQUEST.name()),ContentType.create("application/json", Consts.UTF_8));
post.setEntity(entity);

try {
client.execute(post, response -> {
int sc = response.getStatusLine().getStatusCode();
if (sc == HttpStatus.SC_CREATED || sc == HttpStatus.SC_OK)
ctx.put (JSON_RESPONSE.name(), EntityUtils.toString(response.getEntity()));
ctx.resume();
return null;
});
return PREPARED | PAUSE | NO_JOIN | READONLY;
} catch (IOException e) {
warn (e);
}
return ABORTED;
}

关于java - 在 JPOS 中放置自定义逻辑的正确位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630162/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com