如何修改PubSub节点中用户的从属关系?Smack 4.2.0问题求助
解决Smack 4.2.0修改PubSub节点用户从属关系时的字段找不到异常
我刚看了你的代码和遇到的java.lang.IllegalArgumentException: Field not found for the specified variable异常,问题出在你没有正确获取节点的现有配置表单,就直接操作空表单导致的。咱们一步步来修正:
问题根源分析
你当前的代码里,先新建了一个空的Form,然后调用createAnswerForm(),但这个空表单里根本没有publish_model这个字段,所以调用setAnswer时自然会抛出找不到字段的异常。正确的做法应该是先获取目标节点的现有配置表单,再基于它创建应答表单来修改配置。
修正后的代码示例
try { PubSubManager mgr = PubSubManager.getInstance(connection); LeafNode node = (LeafNode) mgr.getNode(nodeName); // 第一步:获取节点的当前配置表单 Form currentConfigForm = node.getNodeConfiguration(); // 第二步:基于当前配置表单创建应答表单(用于提交修改) Form submitForm = currentConfigForm.createAnswerForm(); // 第三步:设置publish_model字段的值,这里假设userNamePublisher是你要设置的发布者列表 submitForm.setAnswer(ConfigureNodeFields.publish_model.getFieldName(), userNamePublisher); // 第四步:提交配置更新到服务器 node.sendConfigurationForm(submitForm); } catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException | InterruptedException e) { // 处理异常 e.printStackTrace(); }
关键注意点
- 确保你获取的节点是
LeafNode(叶子节点),因为只有叶子节点才有publish_model这类配置字段 - 必须基于节点的现有配置表单创建应答表单,这样表单里才会包含所有可用的配置字段,包括
publish_model - 提交配置时要处理好Smack相关的异常,避免程序崩溃
内容的提问来源于stack exchange,提问作者Snehangshu Kar
相关产品推荐
相关产品推荐

