我想捕获我的 GW 应用程序(索赔中心和联系人管理器)之间的 SOAP 通信。我想让 CC 或 CM 将请求和响应写入日志文件,或者至少以某种方式通过调试器查看它们。在我看来,Guidewire 的框架对此没有帮助。
我尝试过设置系统属性,但它不起作用,也许框架以某种方式覆盖了它们。我还尝试过定义和利用 SOAPHandler,但它与 @WebService 实现一起使用,并且我的 Web 服务(Contact Manager 的
ABContactAPI
)是使用框架以其他方式定义的。
有没有办法让 Guidewire 的 Web 服务适合这种情况?或者有其他方法让 Guidewire 的 Web 服务在某处记录其 SOAP 消息?或者让 Guidewire 的 Web 客户端代码记录其 SOAP 消息?
我认为没有办法记录
@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 请求/响应。
不确定我是否完全理解您的情况,因为您不断引用 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% 地在 PROD 中运行,并且您已采取所有必要的操作。