更新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
相关产品推荐
相关产品推荐

