在 Guidewire Insurance Suite 中记录 SOAP 消息

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

我想捕获我的 GW 应用程序(索赔中心和联系人管理器)之间的 SOAP 通信。我想让 CC 或 CM 将请求和响应写入日志文件,或者至少以某种方式通过调试器查看它们。在我看来,Guidewire 的框架对此没有帮助。

我尝试过设置系统属性,但它不起作用,也许框架以某种方式覆盖了它们。我还尝试过定义和利用 SOAPHandler,但它与 @WebService 实现一起使用,并且我的 Web 服务(Contact Manager 的

ABContactAPI
)是使用框架以其他方式定义的。 有没有办法让 Guidewire 的 Web 服务适合这种情况?或者有其他方法让 Guidewire 的 Web 服务在某处记录其 SOAP 消息?或者让 Guidewire 的 Web 客户端代码记录其 SOAP 消息?

java logging soap guidewire
2个回答
0
投票

我认为没有办法记录

@WsiWebService
类中定义的函数的实际 SOAP 信封请求/响应。您始终可以记录函数的输入,然后在返回之前记录函数的输出。比如:

public function mySoapFunction (accountNumber : String) : AccountDTO {

  //I assume a logger is defined for this web service class
  logger.info("Calling mySoapFunction with accountNumber ${accountNumber}")

  //The function implementation...

  logger.info("Returning from mySoapFunction with account ${accountDTO.toXml()}")
  return anAccountDTO
}

上面只是伪代码,我不能保证能编译。基本思想是您可以在实际的 SOAP 函数中自己进行日志记录。这很乏味,但我不相信有一种方法可以通过调整设置在 Guidewire 应用程序中本地记录 SOAP 请求/响应。


0
投票

不确定我是否完全理解您的情况,因为您不断引用 JAX-WS 实现,并且需要明确的是 Guidewire Soap 框架不使用 JAX-WS。

如果您使用 @WsiWebService Soap 服务器或利用 WebServiceCollections Soap 客户端,则有一种“简单”的方法来记录整个 SOAP 信封。 您只需将转换器附加到 Web 服务服务器类即可注册转换器,如下所示:

@WsiRequestTransform(MySoapServer._loggingRequestTransformer)

您可以使用 @WsiResponseTransform 执行相同的操作来捕获响应。 转换器只是一个消耗并返回类型如下的 InputStream 的块:

block(InputStream) : InputStream

对于客户来说有点相似。您必须在“wsc”文件中注册配置提供程序。然后在它的实现中,您可以访问配置对象,您可以以类似的方式注册您的请求/响应转换器。

config.RequestTransform = _logWebServicePayload

然而,这种方法有一些警告。

  • 在注册变压器时,它将为每个请求/响应调用变压器,因此请 100% 确定变压器不会一直记录您的有效负载,尤其是。正在生产中! (仅在“_LOGGER.DebugEnabled”等情况下进行任何工作)
  • 它要求您返回InputStream,并且您很可能希望返回与您获得的信息相同的信息,因此提取它并将其再次包装到一些缓冲的InputStream或类似的东西中
  • Soap 有效负载有时包含敏感数据或 PII 数据,因此在处理这些日志时要非常小心,并且您有权将此类信息转储到日志中。我通常为此注册单独的记录器和附加器,以便可以对它们进行适当的维护和额外的基础设施设置

因此,请仅在您确实需要时才执行此操作,并确保它不会 100% 地在 PROD 中运行,并且您已采取所有必要的操作。

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