gpt4 book ai didi

java - 将数据(transactionId)传递给CXF拦截器

转载 作者:行者123 更新时间:2023-12-01 23:50:35 26 4
gpt4 key购买 nike

我尝试构建一个 UI 来查看从我的应用程序发送的 SOAP 事务。

一个典型的场景是每个用户事务都包含对多个系统的多个 Web 服务请求,我正在为该用户事务生成一个 transactionId 并将具有该 transactionId 的所有日志记录在日志文件中,以便可以搜索日志文件使用transactionId可以在UI上显示对应的日志语句。

因此,我能够将生成的 transactionId 附加到所有日志语句中,并能够从日志文件中提取它们。

但问题是,对于 SOAP 请求,我无法找到一种方法来在 SOAP 请求的日志文件中添加相同的 transactionId。

有人可以向我提供一些指导,如何将生成的 transactionId 传递给 CXF 拦截器(或自定义 CXF 拦截器),以便当 CXF 记录 SOAP 请求和响应时,它将附加传递的 transactionId。

像这样

INFO: Outbound Message
---------------------------
transactionId=1234ABCXXX
ID: 1
Address: http://localhost:8080/Zservice/get?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:get xmlns:ns2="http://service.zservice.com/"><arg0/></ns2:get></soap:Body></soap:Envelope>

最佳答案

我终于能够使用 MDC 激活它

在调用 Web 服务客户端的 Web 服务适配器中,在 MDC 中设置事务 ID,如下所示。

      MDC.put("transaction", transId);        
Account acct= new Account();
//Set the requrest

//invoke WS client
client.get(acct);

在您的自定义拦截器中,检索交易 ID

public void handleMessage(SoapMessage message) {

String transaction = MDC.get("transaction");

logger.info("Transaction ID: {} ", transaction);
try {

LogInUtil.logging(logger, message, transaction);
}
catch (Exception ex) {
logger.warn("Unable to save SOAP Response due to {}",ex.getMessage());
}
}

关于java - 将数据(transactionId)传递给CXF拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16347989/

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