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

更新kSOAP2请求:如何将参数封装到auth节点内?

解决kSOAP2添加auth嵌套节点的问题

嘿,我来帮你搞定这个需求!要把参数封装到新的<auth>节点里,你只需要通过嵌套KvmSerializable类的方式来实现,具体步骤如下:

1. 创建对应<auth>节点的自定义类

新建一个Auth类,同样实现KvmSerializable接口,用来封装parameter1、parameter2、parameter3这三个参数:

public class Auth implements KvmSerializable {
    private String parameter1;
    private String parameter2;
    private String parameter3;

    // 空构造方法(kSOAP2反射序列化必须)
    public Auth() {}

    // 带参数的构造方法,方便快速初始化
    public Auth(String p1, String p2, String p3) {
        this.parameter1 = p1;
        this.parameter2 = p2;
        this.parameter3 = p3;
    }

    @Override
    public Object getProperty(int index) {
        switch(index) {
            case 0: return parameter1;
            case 1: return parameter2;
            case 2: return parameter3;
            default: return null;
        }
    }

    @Override
    public int getPropertyCount() {
        return 3;
    }

    @Override
    public void setProperty(int index, Object value) {
        switch(index) {
            case 0: parameter1 = value.toString(); break;
            case 1: parameter2 = value.toString(); break;
            case 2: parameter3 = value.toString(); break;
        }
    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
        switch(index) {
            case 0:
                info.name = "parameter1";
                info.type = String.class;
                break;
            case 1:
                info.name = "parameter2";
                info.type = String.class;
                break;
            case 2:
                info.name = "parameter3";
                info.type = String.class;
                break;
        }
    }
}

2. 修改原有的Login操作类

找到你之前实现KvmSerializable的那个Login请求类(也就是searchRequest对应的类),添加一个Auth类型的属性,然后更新KvmSerializable的四个方法,把<auth>节点作为嵌套属性加入:

public class LoginRequest implements KvmSerializable {
    // 新增auth属性,对应XML里的<auth>节点
    private Auth auth;

    // 空构造方法
    public LoginRequest() {}

    // 带auth参数的构造方法
    public LoginRequest(Auth auth) {
        this.auth = auth;
    }

    // Getter和Setter
    public Auth getAuth() { return auth; }
    public void setAuth(Auth auth) { this.auth = auth; }

    @Override
    public Object getProperty(int index) {
        // 现在只有一个顶层属性:auth
        return auth;
    }

    @Override
    public int getPropertyCount() {
        return 1;
    }

    @Override
    public void setProperty(int index, Object value) {
        if(index == 0) {
            auth = (Auth) value;
        }
    }

    @Override
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) {
        if(index == 0) {
            info.name = "auth"; // 对应XML里的<auth>节点名
            info.type = Auth.class; // 指定类型为我们刚创建的Auth类
        }
    }
}

3. 调整请求发起代码

现在你只需要先初始化Auth对象,再把它设置到LoginRequest里,最后传入SOAP信封就可以了:

// 1. 创建Auth实例并赋值
Auth auth = new Auth("example1", "example2", "example3");

// 2. 创建LoginRequest实例,传入auth
LoginRequest searchRequest = new LoginRequest(auth);

// 3. 还是用原来的方式传入信封,kSOAP2会自动序列化出嵌套的XML结构
envelope.setOutputSoapObject(searchRequest);

这样处理后,生成的XML就会和你需要的结构完全一致:

<bios:login>
  <auth>
    <parameter1>example1</parameter1>
    <parameter2>example2</parameter2>
    <parameter3>example3</parameter3>
  </auth>
</bios:login>

内容的提问来源于stack exchange,提问作者Jaime Alcántara Arnela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:36