0

I'm trying to subscribe to Notification Service and consumer alarms similar to (org.omg.CORBA.MARSHAL: Server-side Exception: null)!, but getting marshalling errors. Many thanks if someone can help me with what I'm missing or doing wrong.

The idls files are from NotificationIRP idls and using jacorb-3.5 api.

NotificationConsumer.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);
}

} }

Result

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)

_NotificationIRPOperationsStub.attach_push where the error occurs ($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
Community
  • 1
  • 1
user2326017
  • 1
  • 1
  • 2

2 Answers2

0

Problem i guess here is you will need to add registrar before even you use naming service in new CORBA right after orb.init(). When you pass any object with orb it tries to check if that is already registered with any service. else it starts marshaling data. I am looking inside your code will try to find solution soon

Sumit Lubal
  • 329
  • 2
  • 13
0

Did you figure this out? I'm trying the same thing, to connect to Ericsson Corba northbound interface, but in Perl, not in Java.

You are sending wrong objects to attach_push(), object types need to be exactly:

  • manager_reference: plain string,
  • time_tick: ManagedGenericIRPConstDefs::UnsignedLongOpt, not int as in your code!
  • cats: NotificationIRPConstDefs::NotificationCategorySet, not string array.
  • filter: ManagedGenericIRPConstDefs::StringOpt, not string.

Also, you are trying to send all categories in cats but that includes events and qos. For events you need to use proprietary EventIRP instead of NotificationIRPSystem and qos you probably don't need. For alarms you can use just one category "1f1". In Perl it's done like this:

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

Try to figure out the same thing in Java. It's not working for me yet, work is still in progress...

BJovke
  • 1,737
  • 15
  • 18