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

使用Java代码在WebSphere中创建ListenerPort报错求助

解决Java中使用ConfigService创建ListenerPort时的“invalid attribute name/type”错误

我之前在WebSphere上用ConfigService做配置的时候也踩过类似的坑,结合你提到的Jython成功、Java失败的情况,大概率是这几个细节没处理对:

1. 类型名称或属性键名的大小写/拼写问题

WebSphere的配置API对名称的大小写是严格敏感的,Jython的AdminConfig可能会做一些隐式处理,但Java的ConfigService完全是“死板”的精确匹配:

  • 确认你指定的类型名是**ListenerPort**(首字母大写,后面的Port也要大写),不能写成listenerPort或者其他变体
  • 检查所有属性键名和Jython里用的完全一致,比如Jython里用name、destinationJNDIName、listenerRef,Java里不能改成Name或DestinationJndiName这类大小写错误的键名

2. 属性值的类型不匹配

这是最容易踩的坑!Jython里可以直接传字符串名称,但Java的ConfigService要求属性值必须和WebSphere配置定义的类型严格对应:

  • 比如listenerRef属性,Jython里传监听器的字符串名称就能自动关联,但Java里必须传入对应监听器的ObjectName对象,不能传字符串
  • 字符串类型的属性(比如name、destinationJNDIName)要确保传的是String类型,不能传Object或者其他类型

3. 父对象的类型验证

你提到messageListenerService是通过queryObject获取的ObjectName,要先确认这个对象的类型确实是MessageListenerService——只有这个类型的父对象才能创建ListenerPort子对象。可以用下面的代码验证:

// 检查父对象的类型
String serviceType = messageListenerService.getKeyProperty("type");
System.out.println("MessageListenerService type: " + serviceType);
// 输出应该是MessageListenerService,如果不是,说明你查错了对象

正确的Java示例代码

给你一个能正常工作的参考代码,对比下你的实现:

import com.ibm.websphere.management.configservice.ConfigService;
import com.ibm.websphere.management.configservice.ConfigServiceFactory;
import javax.management.ObjectName;
import java.util.Hashtable;

// 假设已经初始化了ConfigService,并且正确获取了messageListenerService和listenerObj(监听器的ObjectName)
ConfigService configService = ConfigServiceFactory.getInstance();

// 准备ListenerPort的属性,键名和类型严格对应
Hashtable<String, Object> lpAttributes = new Hashtable<>();
lpAttributes.put("name", "MyNewListenerPort"); // String类型
lpAttributes.put("destinationJNDIName", "jms/MyTargetQueue"); // String类型
lpAttributes.put("listenerRef", listenerObj); // 必须是ObjectName类型

// 创建ListenerPort,父对象是messageListenerService,类型是ListenerPort
ObjectName newListenerPort = configService.createConfigData(
    messageListenerService, 
    "ListenerPort", 
    lpAttributes
);

// 别忘了保存配置,否则重启服务器后会丢失
configService.save();

快速排查步骤

  1. 把你Java里用的属性键名和Jython里的代码一一对比,确保完全一致
  2. 检查每个属性值的类型,特别是需要ObjectName的属性,不能用字符串替代
  3. 验证父对象messageListenerService的类型是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:44