Spring WS - Soap 请求缺少标头

问题描述 投票:0回答:1

我正在使用 SpringBoot SOAP Web 服务(spring-boot-starter-web-services)。 我配置了 Jaxb2Marshaller 和 WebServiceGatewaySupport bean。问题是,生成的肥皂请求是:

  1. 缺少标题
  2. 名称空间 url 不正确:我需要“/soapenvelope”而不是 xmlns:SOAP-ENV="/soap-envelope"

如何更改架构名称并添加所需的 xml 标头?

我尝试配置 JAXB2Marshaller

spring-boot soap
1个回答
0
投票

要添加 XML 声明并更正 SOAP 请求中的命名空间,您可以使用拦截器。以下是如何做到这一点的示例:

import org.springframework.ws.client.WebServiceClientException;
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.soap.SoapMessage;

public class SoapHeaderInterceptor implements ClientInterceptor {

    @Override
    public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
        SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();
        soapMessage.setSoapAction("/soapenvelope");
        soapMessage.writeTo(System.out);  // This will print the request message to the console
        return true;
    }

    // Implement other methods...
}

然后,您可以将此拦截器添加到您的

WebServiceTemplate

@Autowired
private Jaxb2Marshaller marshaller;

@Bean
public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate webServiceTemplate = new WebServiceTemplate(marshaller);
    ClientInterceptor[] interceptors = new ClientInterceptor[]{new SoapHeaderInterceptor()};
    webServiceTemplate.setInterceptors(interceptors);
    return webServiceTemplate;
}

这将确保通过

WebServiceTemplate
发送的每个 SOAP 请求都将具有正确的 SOAP 操作和 XML 声明。请将“/soapenvelope”替换为您的实际 SOAP 操作。您可能需要调整代码以满足您的特定需求。如果你有结果请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.