我正在使用 SpringBoot SOAP Web 服务(spring-boot-starter-web-services)。 我配置了 Jaxb2Marshaller 和 WebServiceGatewaySupport bean。问题是,生成的肥皂请求是:
如何更改架构名称并添加所需的 xml 标头?
我尝试配置 JAXB2Marshaller
要添加 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 操作。您可能需要调整代码以满足您的特定需求。如果你有结果请告诉我。