我正在根据外部提供的 WSDL 文件在 Spring Boot 中开发合同优先的 SOAP Web 服务,并使用这个 Gradle wsdl2java 插件从该 WSDL 生成 POJO 和端点接口。该服务已启动并正在运行并且能够接收请求和反序列化 XML,但它应该异步响应(即,wsa:ReplyTo
从传入消息中读取标头,根据 XML 反序列化是否成功以 HTTP 202 或 500 同步响应,然后开始处理反序列化的对象,并在完成后向指定的地址发送响应),我不知道如何获取该标头。
我在谷歌搜索时看到的解决方案是将@SoapHeader
-annotated 参数添加到端点方法,但我不能这样做,因为端点接口是从 WSDL 生成的,并且接口中没有这样的参数。WSDL 本身也没有提及该标头,我不确定是否应该提及(我是 SOAP 世界的新手)。我应该请求更改 WSDL、切换到另一种生成代码的方法,还是做其他事情?
作为参考,生成的端点接口和实现类:
@WebService(targetNamespace = "...", name = "SOAPWS")
@XmlSeeAlso({/* not relevant */})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface SOAPWS{
@WebMethod(operationName = "method", action = "...")
@Oneway
public void method(
@WebParam(partName = "param", name = "...", targetNamespace = "...")
ParamType param
);
}
@Endpoint
public class SOAPWSImpl implements SOAPWS {
private static final String NAMESPACE_URI = "...";
@Override
@PayloadRoot(localPart = "...", namespace = NAMESPACE_URI)
public void method(@RequestPayload ParamType param) {
// implementation
}
}