1

我正在根据外部提供的 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
  }

}
4

0 回答 0