package com.zjrs.ggfw.shbzk.util;

import cn.hutool.http.webservice.SoapClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class WebServiceUtil {

    private static final Logger LOG = LoggerFactory.getLogger(WebServiceUtil.class);

    /**
     * 调用 WebService 接口
     * @param url 接口地址
     * @param methodName 方法名
     * @param args 参数数组
     * @return 接口返回的字符串
     */
    public static String invoke(String url, String methodName, Object[] args) {
        try {
            // 1. 创建 SoapClient
            // 如果原来的 qName 包含 namespace，建议在第二个参数传入，否则传 null
            SoapClient client = SoapClient.create(url)
                    .setMethod(methodName)
                    // 2. 分别设置连接超时和读取超时（对应原 Axis 的 30000ms）
                    .setConnectionTimeout(30000)
                    .setReadTimeout(30000);

            // 3. 填充参数
            // 注意：Axis 的 Object[] 是按序排列，Hutool 默认参数名通常为 arg0, arg1...
            if (args != null) {
                for (int i = 0; i < args.length; i++) {
                    client.setParam("arg" + i, args[i]);
                }
            }

            // 4. 发送请求并获取 Body 内容
            // send(true) 表示只返回 Body 内部的 XML 内容字符串
            String result = client.send(true);

            if (LOG.isDebugEnabled()) {
                LOG.debug("WebService 调用成功 | 方法: {} | 结果: {}", methodName, result);
            }
            return result;

        } catch (Exception e) {
            LOG.error("WebService 接口调用异常 | URL: {} | 方法: {} | 错误: {}", url, methodName, e.getMessage(), e);
            return "";
        }
    }
}