有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CORBA通知订阅(错误:org.omg.CORBA.MARSHAL:vmcid:0x0次要代码:0已完成:否)

我正在尝试订阅类似(org.omg.CORBA.MARSHAL: Server-side Exception: null)的通知服务和消费者警报!,但是要得到编组错误。如果有人能帮我解决我的缺失或做错的事情,我将不胜感激

idls文件来自NotificationIRP idls,使用jacorb-3.5API

通知消费者。java

import org.omg.CORBA.*;
import org.omg.CORBA.ORB;
import org.omg.CosNotification.*;
import org.omg.CosNotifyComm.*;
import org.omg.CosNotifyChannelAdmin.*;
import org.omg.CosNotifyFilter.*;
import org.omg.CosNaming.*;
import org.omg.PortableServer.*;

import NotificationIRPSystem.*;
//import AlarmIRPSystem.*;
import java.io.*;

public class NotificationConsumer {

    private static String notifIRPName = "com/ericsson/nms/cif/service/NMSNAConsumer";
    private static String notifIRPPortal = "com/ericsson/nms/cif/service/NMSNAPortal";

    public static void main(String args[]) throws IOException {
  try{
  //initialize ORB
   org.omg.CORBA.ORB orb = ORB.init(args, null);

  //read stringified object from file
  FileReader fr = new FileReader("ExternalNamingService.1");
  BufferedReader br = new BufferedReader(fr);
  String ior = br.readLine();
  org.omg.CORBA.Object obj = orb.string_to_object(ior);

  NamingContextExt ncRef = NamingContextExtHelper.narrow(obj);
  org.omg.CORBA.Object notiObj = ncRef.resolve_str(notifIRPName);

  //get notification operations object
  NotificationIRPOperations nOps = NotificationIRPOperationsHelper.narrow(notiObj);
  System.out.println("NOTIFICATION|" + nOps);

  //activate poa manager
  IRPManager iManager = new IRPManager();
  POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
  poa.the_POAManager().activate();
  org.omg.CORBA.Object notiServerObj = poa.servant_to_reference(iManager);

  //subscribe to notifications
  String manager_reference = orb.object_to_string(notiServerObj);
  System.out.println("MANAGER REF|" + manager_reference);
  int time_tick = 15;
  String filter = "";
  String[] asd = {};
  NotificationIRPConstDefs.EventTypesSetHolder e_list = new NotificationIRPConstDefs.EventTypesSetHolder();
  NotificationIRPConstDefs.ExtendedEventTypesSetHolder ex_list = new NotificationIRPConstDefs.ExtendedEventTypesSetHolder();
  String cats[] = nOps.get_notification_categories(e_list, ex_list);

  String vers[] = nOps.get_notification_IRP_version();
  for (String ver : vers){
    System.out.println("notification IRP version is: " + ver);
  }

  String resp = nOps.attach_push(manager_reference, time_tick, cats, filter);

  //print subscription ids
  String subs[] = nOps.get_subscription_ids(manager_reference);
  for (String sub : subs){
    System.out.println("subscription id: "+sub);
  }

  } catch (Exception ex){
     System.out.println ("ERROR: " + ex);
}

} }

结果

NOTIFICATION|IOR:000000000000004449444c3a336770707361352e6f72672f4e6f74696669636174696f6e49525053797374656d2f4e6f74696669636174696f6e4952504f7065726174696f6e733a312e300000000001000000000000008c000102000000000d31302e3234372e34362e32330000c27b0000002c00504d43000000040000000c2f466163746f7279504f4100000000104e4d534e41436f6e73756d6572322e3300000003564953030000000500070801ff000000000000000000000800000000564953000000000100000018000000000001000100000001050100010001010900000000
MANAGER REF|IOR:000000000000003349444c3a6f6d672e6f72672f436f734e6f74696679436f6d6d2f53657175656e636550757368436f6e73756d65723a312e30000000000001000000000000008a000102000000000f31302e3136312e3133302e3131300000b0b8000000000031afabcb00000000206c4ce5e000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
notification IRP version is: 1n1
ERROR: org.omg.CORBA.MARSHAL:   vmcid: 0x0  minor code: 0  completed: No
org.omg.CORBA.MARSHAL:   vmcid: 0x0  minor code: 0  completed: No
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:916)
    at com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:116)
    at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:590)
    at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:489)
    at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:373)
    at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:147)
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:475)
    at NotificationIRPSystem._NotificationIRPOperationsStub.attach_push(_NotificationIRPOperationsStub.java:26)
    at NotificationConsumer.main(NotificationConsumer.java:59)

\u通知IRPoperationsStub。在发生错误的地方附加推送($in=_invoke($out);)

  /**
  * NotificationIRPSystem/_NotificationIRPOperationsStub.java .
  * Generated by the IDL-to-Java compiler (portable), version "3.2"
  * from NotificationIRPSystem.idl
  * Wednesday, 4 February 2015 3:49:56 PM EST
  */

  public class _NotificationIRPOperationsStub extends   org.omg.CORBA.portable.ObjectImpl implements   NotificationIRPSystem.NotificationIRPOperations
  {
   /* ## Operation: attach_push
   */
   public String attach_push (String manager_reference, int time_tick, String[] notification_category_set, String filter) throws NotificationIRPSystem.Attach, NotificationIRPSystem.ParameterNotSupported, NotificationIRPSystem.InvalidParameter, NotificationIRPSystem.AlreadySubscribed, NotificationIRPSystem.AtLeastOneNotificationCategoryNotSupported
   {
             org.omg.CORBA.portable.InputStream $in = null;
             try {
                org.omg.CORBA.portable.OutputStream $out = _request ("attach_push", true);
                 $out.write_string (manager_reference);
                 $out.write_long (time_tick);
               NotificationIRPConstDefs.NotificationCategorySetHelper.write ($out, notification_category_set);
                 $out.write_string (filter);
                 $in = _invoke ($out);
                 String $result = NotificationIRPConstDefs.SubscriptionIdHelper.read ($in);
                 return $result;
             } catch (org.omg.CORBA.portable.ApplicationException $ex) {
            $in = $ex.getInputStream ();
            String _id = $ex.getId ();
                 if (_id.equals ("IDL:3gppsa5.org/NotificationIRPSystem/Attach:1.0"))
                throw NotificationIRPSystem.AttachHelper.read ($in);
                 else if (_id.equals ("IDL:3gppsa5.org/NotificationIRPSystem/ParameterNotSupported:1.0"))
                     throw  NotificationIRPSystem.ParameterNotSupportedHelper.read ($in);
                 else if (_id.equals ("IDL:3gppsa5.org/NotificationIRPSystem/InvalidParameter:1.0"))
                     throw NotificationIRPSystem.InvalidParameterHelper.read ($in);
                 else if (_id.equals ("IDL:3gppsa5.org/NotificationIRPSystem/AlreadySubscribed:1.0"))
                     throw NotificationIRPSystem.AlreadySubscribedHelper.read ($in);
                 else if (_id.equals ("IDL:3gppsa5.org/NotificationIRPSystem/AtLeastOneNotificationCategoryNotSupported:1.0"))
                     throw NotificationIRPSystem.AtLeastOneNotificationCategoryNotSupportedHelper.read ($in);
                 else
                     throw new org.omg.CORBA.MARSHAL (_id);
            } catch (org.omg.CORBA.portable.RemarshalException $rm) {
                return attach_push (manager_reference, time_tick, notification_category_set, filter        );
            } finally {
                _releaseReply ($in);
             }
   } // attach_push

共 (1) 个答案

  1. # 1 楼答案

    你弄明白了吗? 我也在尝试同样的事情,连接到Ericsson Corba northbound接口,但使用Perl,而不是Java

    您将错误的对象发送到attach_push(),对象类型必须完全符合以下要求:

    • 经理参考:普通字符串
    • time_tick:managedgenericirpconstefs::UnsignedLongOpt,与代码中的int不同
    • cats:NotificationIRPConstDefs::NotificationCategorySet,非字符串数组
    • 过滤器:managedgenericirpconstefs::StringOpt,非字符串

    此外,您正在尝试以cats发送所有类别,但这包括事件和qos。对于事件,您需要使用专有的EventIRP,而不是您可能不需要的NotificationIRPSystem和qos。对于警报,您只能使用一个类别“1f1”。在Perl中是这样做的:

    my $category_set=NotificationIRPConstDefs::NotificationCategorySetOpt->new();
    $category_set->value(["1f1"]);
    

    试着在Java中找出同样的问题。这对我还不起作用,工作仍在进行中