You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Guidewire Insurance Suite中捕获SOAP通信日志的方法咨询

Guidewire应用间SOAP通信捕获方案

一、通过Guidewire日志配置开启JAX-WS原生日志

Guidewire基于JAX-WS(GlassFish实现),可以通过调整日志配置和启动参数直接记录SOAP消息:

  • 修改日志配置文件:在config/log4j2.xml(对应环境的日志配置文件)中添加以下日志器,将SOAP消息输出到指定文件:
<Logger name="com.sun.xml.ws.transport.http.client.HttpTransportPipe" level="DEBUG" additivity="false">
    <AppenderRef ref="FileAppender"/> <!-- 替换为你的文件输出Appender名称 -->
</Logger>
<Logger name="com.sun.xml.ws.server.dispatch.HttpAdapter" level="DEBUG" additivity="false">
    <AppenderRef ref="FileAppender"/>
</Logger>
  • 调整启动参数:在Guidewire启动脚本(gwenv.bat或gwenv.sh)中注入JVM系统属性,确保启动时加载:
# Linux/macOS环境
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true -Dcom.sun.xml.ws.server.dispatch.HttpAdapter.dump=true"

# Windows环境
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true -Dcom.sun.xml.ws.server.dispatch.HttpAdapter.dump=true

注:之前设置系统属性无效,大概率是启动时机错误——必须在Guidewire应用启动前注入参数,而非运行时动态添加。

二、自定义Guidewire Web服务拦截器(服务端专属)

针对Contact Manager中框架生成的ABContactAPI服务,可通过Guidewire内置拦截器机制捕获SOAP消息:

  1. 实现自定义拦截器:创建继承AbstractWebServiceInterceptor的类,重写请求/响应处理方法:
package com.yourcompany.gw.interceptors;

import gw.web.service.AbstractWebServiceInterceptor;
import gw.web.service.MessageContext;
import javax.xml.soap.SOAPMessage;
import java.io.StringWriter;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class SOAPLoggingInterceptor extends AbstractWebServiceInterceptor {
    private static final Logger logger = LogManager.getLogger(SOAPLoggingInterceptor.class);

    @Override
    public boolean handleRequest(MessageContext context) {
        logSOAPMessage("Incoming SOAP Request", context.getMessage());
        return true;
    }

    @Override
    public void handleResponse(MessageContext context) {
        logSOAPMessage("Outgoing SOAP Response", context.getMessage());
    }

    private void logSOAPMessage(String label, SOAPMessage soapMsg) {
        try (StringWriter writer = new StringWriter()) {
            soapMsg.writeTo(writer);
            logger.debug("{}:\n{}", label, writer.toString());
        } catch (Exception e) {
            logger.error("Failed to log SOAP message", e);
        }
    }
}
  1. 注册拦截器:在gw/web/services.xml中找到ABContactAPI的服务配置,添加拦截器引用:
<service name="ABContactAPI">
    <!-- 原有服务配置内容 -->
    <interceptors>
        <interceptor class="com.yourcompany.gw.interceptors.SOAPLoggingInterceptor"/>
    </interceptors>
</service>

重启Contact Manager后,SOAP请求/响应会被记录到日志中。

三、第三方代理工具(无代码修改方案)

如果不想改动应用代码或配置,可通过代理工具捕获通信:

  • TCPMon:监听本地端口,将请求转发到目标服务端,实时记录所有SOAP请求和响应的XML内容
  • Charles Proxy:配置应用使用Charles作为HTTP代理,过滤SOAP请求路径,直接查看请求/响应的原始XML
  • Wireshark:捕获服务器间的TCP流量,通过端口过滤(如8080、8443),解析HTTP协议提取SOAP消息

四、调试器实时查看(开发环境)

在IDE中调试Guidewire应用时,可通过断点查看SOAP消息:

  • 服务端:在com.sun.xml.ws.server.sei.SEIInvokerTube的processRequest方法设置断点,查看message变量对应的SOAPMessage内容
  • 客户端:在com.sun.xml.ws.client.sei.SEIStub的invoke方法设置断点,解析请求/响应的SOAP对象

内容的提问来源于stack exchange,提问作者Dragan Jovanović

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:43:31