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

如何仅用JDK API将SOAP Message输出到标准输出流?

纯JDK实现SOAP消息输出到标准输出

当然可以!完全不需要依赖Apache Commons IO这类外部库,JDK本身就提供了足够的工具来完成这个需求——甚至还能简化你的代码。

核心改进点:

  • JDK自带java.io.ByteArrayOutputStream,和Apache版本的API几乎完全一致,直接替换就能用,不用额外打包依赖。
  • 更直接的方式:跳过中间的字节数组输出流,直接把SOAP消息写入标准输出流System.out,既省内存又简洁。

修改后的完整代码

import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPException;
import java.io.IOException;

public boolean handleMessage(SOAPMessageContext context) {
    Boolean isOutbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    
    // 处理入站消息(如果需要处理出站,去掉!即可)
    if (!isOutbound) {
        try {
            SOAPMessage soapMessage = context.getMessage();
            // 直接写入标准输出
            soapMessage.writeTo(System.out);
            // 加个换行让输出更整洁
            System.out.println();
        } catch (SOAPException | IOException e) {
            // 根据业务需求处理异常,比如打印日志或终止处理链
            e.printStackTrace();
            return false;
        }
    }
    // 返回true表示继续执行后续的处理器逻辑
    return true;
}

额外说明

  1. 异常处理:SOAPMessage.writeTo()会抛出SOAPException和IOException,必须显式捕获或声明抛出,否则编译不通过。
  2. 处理器返回值:JAX-WS要求handleMessage方法必须返回boolean——返回true会继续执行后续的处理器链,返回false则会终止处理。
  3. 入站/出站控制:代码里的!isOutbound表示只处理入站消息,如果需要输出出站消息,去掉感叹号即可。

内容的提问来源于stack exchange,提问作者Carla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:51