java - 错误 org.omg.CORBA.MARSHAL 序列长度太大

标签 java corba huawei-mobile-services

成功从 Corba U2000 服务器获取警报并读取值后,我收到以下错误

ERROR: org.omg.CORBA.MARSHAL: Sequence length too large. Only 12 available and trying to assign 31926513  vmcid: 0x0  minor code: 0  completed: No
org.omg.CORBA.MARSHAL: Sequence length too large. Only 12 available and trying to assign 31926513  vmcid: 0x0  minor code: 0  completed: No
at org.omg.CosNotification.EventBatchHelper.read(EventBatchHelper.java:57)
at AlarmIRPConstDefs.AlarmInformationSeqHelper.read(AlarmInformationSeqHelper.java:51)
at AlarmIRPConstDefs.AlarmInformationSeqHelper.extract(AlarmInformationSeqHelper.java:26)
at com.be.u2k.Main.getAlarmsList(Main.java:144)
at com.be.u2k.Main.main(Main.java:109)

对于方法AlarmInformationSeqHelper.extract

// Get all active alarms list
private static void getAlarmsList(ORB orb, AlarmIRP alarmIRP) {
    try {
        ManagedGenericIRPConstDefs.StringTypeOpt filter = new ManagedGenericIRPConstDefs.StringTypeOpt();
        filter.value("($type_name == 'x1')"); // Query new alarms and acknowledge or unacknowledge alarms
        AlarmIRPConstDefs.DNTypeOpt base_object = new AlarmIRPConstDefs.DNTypeOpt();
        BooleanHolder flag = new BooleanHolder();
        AlarmIRPSystem.AlarmInformationIteratorHolder iter = new AlarmIRPSystem.AlarmInformationIteratorHolder();
        StructuredEvent[] alarmList = alarmIRP.get_alarm_list(filter, base_object, flag, iter);
        System.out.println("AlarmIRP get_alarm_list success, flag: " + flag.value + " fetched total: " + (alarmList == null? -1: alarmList.length));

        for (StructuredEvent alarm: alarmList) {
            if (alarm.header != null) {
                System.out.println("fixed_header.event_type.name: " + alarm.header.fixed_header.event_type.type_name
                        + " fixed_header.event_type.domain_name: " + alarm.header.fixed_header.event_type.domain_name);
                if (alarm.header.variable_header != null) {
                    for (Property variableHeader: alarm.header.variable_header) {
                        System.out.println("variable_header.name: " + variableHeader.name + " alarm.header.variable_header.value: " +  variableHeader.value);
                    }
                }
            }

            if (alarm.filterable_data != null) {
                for (Property filterableData: alarm.filterable_data) {
                    System.out.println("data.name: " + filterableData.name);
                    if (filterableData.value != null && filterableData.value.toString().contains("org.jacorb.orb.CDROutputStream")) {
                        StructuredEvent[] filterableDataValues = AlarmInformationSeqHelper.extract(filterableData.value);
                    } else {
                        System.out.println("data.value: " + filterableData.value);
                    }
                }
            }
        }

    } catch (ManagedGenericIRPSystem.InvalidParameter e) {
        System.out.println("ERROR get_alarm_list InvalidParameter (Indicates that the parameter is invalid): " + e) ;   
    } catch (ManagedGenericIRPSystem.ParameterNotSupported e) {
        System.out.println("ERROR get_alarm_list ParameterNotSupported (Indicates that the operation is not supported): " + e) ;    
    } catch (AlarmIRPSystem.GetAlarmList e) {
        System.out.println("ERROR get_alarm_list ParameterNotSupported (Indicates exceptions caused by unknown reasons): " + e) ;   
    }
}

或者我读取警报列表的方式不正确?谢谢。

最佳答案

您可以在下面找到 getAlarmList 的示例方法

//Connect to AlarmIRP
AlarmIRP alarmIRP = AlarmIRPHelper.narrow(orb.string_to_object(alarmIrpIOR.value));
StringTypeOpt alarmFilter = new StringTypeOpt();
alarmFilter.value("");
DNTypeOpt base_object = new DNTypeOpt();
base_object.value("");
BooleanHolder flag = new BooleanHolder(false);  // false for iteration
AlarmInformationIteratorHolder iter = new AlarmInformationIteratorHolder();

List<String> alarmIds = get_alarm_list(alarmIRP, alarmFilter, base_object, flag, iter);

private List<String> get_alarm_list(org._3gppsa5_2.AlarmIRPSystem.AlarmIRP alarmIRP, org._3gppsa5_2.ManagedGenericIRPConstDefs.StringTypeOpt alarmFilter, org._3gppsa5_2.AlarmIRPConstDefs.DNTypeOpt base_object, BooleanHolder flag, org._3gppsa5_2.AlarmIRPSystem.AlarmInformationIteratorHolder iter) throws org._3gppsa5_2.AlarmIRPSystem.GetAlarmList, org._3gppsa5_2.ManagedGenericIRPSystem.ParameterNotSupported, org._3gppsa5_2.AlarmIRPSystem.NextAlarmInformations, org._3gppsa5_2.ManagedGenericIRPSystem.InvalidParameter, BAD_OPERATION {
    logger.info("[get-alarm-list][start]");
    alarmIRP.get_alarm_list(alarmFilter, base_object, flag, iter);

    List<StructuredEvent> alarms = new ArrayList();
    EventBatchHolder alarmInformation = new EventBatchHolder();
    short alarmSize = 100;
    List<String> alarmIds = new ArrayList();
    while (iter.value.next_alarmInformations(alarmSize, alarmInformation)) {
        alarms.addAll(Arrays.asList(alarmInformation.value));
        logger.info("Current alarm size:" + alarms.size());
    }

    for (StructuredEvent event : alarms) {
        try {
        //printAlarm(event);
        } catch (Exception ex) {
        }
        List<Property> rem = new ArrayList<Property>();
        rem.addAll(Arrays.asList(PropertySeqHelper.extract(event.remainder_of_body)));
        for (Property property : rem) {
        if (!property.name.equals(org._3gppsa5_2.AlarmIRPNotifications.NotifyNewAlarm.ALARM_ID)) {
            continue;
        }

        alarmIds.add(property.value.extract_string());
        }
    }
    logger.info("[get-alarm-list][completed] size :" + alarms.size());

    return alarmIds;
}

关于java - 错误 org.omg.CORBA.MARSHAL 序列长度太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45475682/

相关文章:

java - 单击按钮外部区域时激活按钮(Java/Blackberry 应用程序)

osgi - 在 OSGI 中使用 JACORB

nullpointerexception - 华为 P8 Lite 应用崩溃;在其他设备上工作正常

r - 在 R 中将字符转换为 HMS

java - JPA - 仅当方法为@Transactional 时才更新数据库

java - Scala 遗传算法 (GA) 库中的模拟二进制交叉 (SBX) 交叉运算符

java - Spring MVC,从请求生成表单支持对象?

java - java网络编程

java - 调用 EJB 方法时出现 CORBA.COMM_FAILURE

flutter - 应用插件: 'com.huawei.agconnect' in Flutter时出现错误