You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WSDL生成的SOAP Web客户端中使用Holder<Payload>

使用WSDL生成的WebService客户端发送请求实操指南

我来帮你一步步梳理怎么用这个生成的WebService客户端发送请求,结合你给出的接口和客户端类来拆解:

1. 先理解核心接口

你给出的IConnectService接口是核心服务入口,关键代码如下:

public interface IConnectService {
    public void processMessage(
        @WebParam(name = "payload", mode = WebParam.Mode.INOUT) Holder<Payload> payload
    );
}

这里要重点注意:@WebParam的mode是INOUT,意味着这个Holder<Payload>参数既是请求入参,又是响应出参——你传入的Payload会被服务端处理,处理后的结果会存回同一个Holder对象里。

2. 客户端代码使用步骤

结合生成的ConnectService客户端类,具体使用流程如下:

  • 第一步:初始化服务实例
    因为ConnectService继承了Service,直接实例化即可(生成的代码里已经帮你封装了WSDL地址):

    ConnectService connectService = new ConnectService();
    

    如果需要指定自定义的WSDL地址,也可以用带URL参数的构造方法,覆盖默认的CONNECTSERVICE_WSDL_LOCATION。

  • 第二步:获取服务端口代理
    通过服务实例拿到实际的接口代理对象,方法名一般是get[端口名称]Port,具体以生成的代码为准:

    IConnectService servicePort = connectService.getIConnectServicePort();
    
  • 第三步:准备请求参数
    先创建你的请求Payload对象,设置好需要的业务参数,再用Holder类包装(Holder是JAX-WS里专门用于INOUT模式的容器类):

    Payload requestPayload = new Payload();
    // 给Payload设置具体参数,比如requestPayload.setData("你的请求数据");
    Holder<Payload> payloadHolder = new Holder<>(requestPayload);
    
  • 第四步:调用服务方法
    直接调用processMessage方法,传入包装好的Holder对象:

    servicePort.processMessage(payloadHolder);
    
  • 第五步:获取响应结果
    调用完成后,服务端处理后的Payload就存在payloadHolder.value里了,直接取出使用即可:

    Payload responsePayload = payloadHolder.value;
    // 处理响应数据,比如打印或解析responsePayload的字段
    

3. 额外注意事项

  • WSDL地址有效性:确保CONNECTSERVICE_WSDL_LOCATION指向的地址能正常访问服务端,本地开发时如果服务端地址变更,记得修改这个常量或者通过代码动态指定。
  • 配置请求属性:如果需要设置超时、认证信息或者修改服务端地址,可以通过BindingProvider来调整:
    BindingProvider bindingProvider = (BindingProvider) servicePort;
    // 动态修改服务端地址
    bindingProvider.getRequestContext().put(
        BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
        "http://your-service-url/ConnectService"
    );
    // 设置连接和读取超时(单位:毫秒)
    bindingProvider.getRequestContext().put("javax.xml.ws.client.connectionTimeout", "30000");
    bindingProvider.getRequestContext().put("javax.xml.ws.client.receiveTimeout", "30000");
    
  • Payload字段匹配:生成的Payload类字段是和WSDL定义一致的,要按照服务端的接口文档设置正确的参数,避免因字段不匹配导致请求失败。

内容的提问来源于stack exchange,提问作者asymmetricat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:13