如何仅用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; }
额外说明
- 异常处理:
SOAPMessage.writeTo()会抛出SOAPException和IOException,必须显式捕获或声明抛出,否则编译不通过。 - 处理器返回值:JAX-WS要求
handleMessage方法必须返回boolean——返回true会继续执行后续的处理器链,返回false则会终止处理。 - 入站/出站控制:代码里的
!isOutbound表示只处理入站消息,如果需要输出出站消息,去掉感叹号即可。
内容的提问来源于stack exchange,提问作者Carla
相关产品推荐
相关产品推荐

