2015-02-09 76 views
0

我試圖訂閱通知服務和類似於(org.omg.CORBA.MARSHAL: Server-side Exception: null)!的消費者警報,但獲取編組錯誤。非常感謝,如果有人能幫我解決我失蹤或做錯的事情。CORBA通知訂閱(錯誤:org.omg.CORBA.MARSHAL:vmcid:0x0次要代碼:0完成:否)

idls文件從NotificationIRP idls和使用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); 
} 

} }

結果

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發生錯誤(在$ = _invoke($出) ;)

/** 
    * 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 

回答

0

問題,我在這裏的猜測是,你需要你正在使用後在ORB.init正確的命名服務在新的CORBA之前添加註冊商()。當你使用orb傳遞任何對象時,它會嘗試檢查它是否已經被任何服務註冊。否則它開始編組數據。我正在尋找你的代碼將盡快找到解決方案

+0

如果你能弄清楚我的回調對象有什麼問題,那將是非常好的選擇。非常感謝 – user2326017 2015-02-13 01:36:46

0

你知道嗎? 我試圖用同樣的方法連接到愛立信Corba北向接口,但使用Perl,而不使用Java。

您發送錯誤的對象attach_push(),對象類型需要準確地:

  • manager_reference:純字符串,
  • time_tick:ManagedGenericIRPConstDefs :: UnsignedLongOpt,不是int在你的代碼!
  • cats:NotificationIRPConstDefs :: NotificationCategorySet,不是字符串數組。
  • filter:ManagedGenericIRPConstDefs :: StringOpt,不是字符串。

而且,你要發送的貓所有類別但包括事件和QoS。對於事件,您需要使用專有的EventIRP而不是NotificationIRPSystem和qos,這可能不需要。對於警報,您只能使用一個類別「1f1」。在Perl中,它是這樣做的:

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

試圖找出Java中的相同的東西。它還沒有爲我工作,工作仍在進行中......

相關問題