soap - 自定义 Spring Integration Web 服务 SOAP 信封/ header

标签 soap spring-integration spring-ws

我正在尝试使用 Spring Integration 发送 SOAP 请求,例如

<int:chain input-channel="wsOutChannel" output-channel="stdoutChannel">
    <int-ws:header-enricher>
        <int-ws:soap-action value="..."/>
    </int-ws:header-enricher>
    <int-ws:outbound-gateway
            uri="..."/>
</int:chain>

但是您只能添加 SOAP 主体,Spring Integration 添加信封、 header 和主体标签,例如

<SOAP-ENV:Envelope>
    <SOAP-ENV:Header>
        <SOAP-ENV:Body>
            ...
        </SOAP-ENV:Body>
    <SOAP-ENV:Header>
</SOAP-ENV:Envelope>

我需要自定义具有特定属性的信封和 header 标签,例如:

<soapenv:Envelope attribute1="value1" attribute2="value2">

和子元素,例如:

<soapenv:Header>
    <child>...<child>
<soapenv:Header>

这可以通过 Spring Integration Web Services 实现,还是我不应该使用 int-ws:outbound-gateway 并采取不同的方法?

最佳答案

您可以添加一个 ClientInterceptor(通过 interceptor 属性),它允许您在发送请求之前修改请求。

编辑

@Artem 的建议更简单,但是拦截器也可以让您访问响应;但无论哪种方式,代码都是相似的。

对于拦截器:

public class MyInterceptor extends ClientInterceptorAdapter {

    @Override
    public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
        SoapMessage request = (SoapMessage) messageContext.getRequest();
        SoapEnvelope envelope = request.getEnvelope();
        envelope.addAttribute(new QName("foo"), "bar");
        SoapHeader header = envelope.getHeader();
        header.addHeaderElement(new QName("http://fiz/buz", "baz"));
        return super.handleRequest(messageContext);
    }

}

对于回调版本:

@Override
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
    SoapEnvelope envelope = ((SoapMessage) message).getEnvelope();
    envelope.addAttribute(new QName("foo"), "bar");
    SoapHeader header = envelope.getHeader();
    header.addHeaderElement(new QName("http://fiz/buz", "baz"));
}

关于soap - 自定义 Spring Integration Web 服务 SOAP 信封/ header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399377/

相关文章:

java - JAX-WS Soap 将 String... 转换为 List<String>

java - SourcePollingChannelAdapter 注册 bean

spring - 从 Spring 4.1.6 升级到 4.2.4 突然出现 TransactionRequiredException

c# - ASMX Web 服务适用于 HTTP 和 HTTPs

java - 客户端 Axis 1.2 中 JDK5 Enum 的自定义序列化

c++ - gsoap,从旧版本迁移 - xml 响应名称和结构已更改

spring-boot - 具有 Spring 集成和 Spring Boot 的微服务

java - Spring Integration TCP 连接在多线程负载/压力测试下被拒绝

java - SAAJ0539/SAAJ0540 : disagreement between Spring-WS 1. 0.4 和 JDK 1.6.0_29 中的 SAAJ

java - 如何配置 Spring-WS 以使用 JAXB Marshaller?