Re: Problem when converting IOR to object reference
- From: Frank Rehberger <Frank Rehberger web de>
- To: Johan Antonsson <Johan Antonsson ibitec se>
- Cc: orbit <orbit-list gnome org>
- Subject: Re: Problem when converting IOR to object reference
- Date: Tue, 06 Jan 2004 11:04:02 +0100
please attach IOR returned by
getReference(host, &objref) != 0) {
Did you try to decode IOR with tool "ior-decode-2"?
Please attach output.
Regards, Frank
Johan Antonsson wrote:
>Hi all,
>
>Hope someone can help me with this newbie question/problem.
>
>I'm using Orbit2 when implementing an API that misc applications can use to invoke operations on a server application running on another machine in a LAN. Client platform is Linux RedHat 8. Server platform is Windows 2000 and Suns Java ORB JDK1.4.2. I'm getting an IOR via a normal socket connection with the server and then I try to convert it to an object reference by using CORBA_ORB_string_to_object() but end up with the exception IDL:omg.org/CORBA/MARSHAL:1.0 instead. I'm having problem figuring out the cause of this problem. My IOR is retrieved successfully. The ORB seem to initialize ok. I know I have to enable remote invocations since they are disabled by default so I placed the following lines in /etc/orbitrc as suggested in the beginners documentation:
>
>ORBIIOPUSOCK=1
>ORBIIOPIPv4=1
>ORBIIOPIPv6=0
>
>Here some code that shows what I'm doing:
>
>adapter.h
>=========
>
>// Return value constants
>#define SUCCESS 0
>#define SYSTEM_EXCEPTION 1
>#define SERVER_EXCEPTION 2
>#define LOGON_EXCEPTION 3
>#define SEARCH_EXCEPTION 4
>#define FLEX_EXCEPTION 5
>#define TIMEOUT_EXCEPTION 6
>
>/**
> * Function used to initialize the adapter and logon to the server
> * On success the return value is SUCCESS.
> * On failure the return value is one of the following values:
> * SERVER_EXCEPTION = failed to get a reference to the adapterserver
> * LOGON_EXCEPTION = the logon failed.
> */
>int flexadapter_init(char *host, char *username, char *password);
>
>
>
>adapter.c
>=========
>
>#include <assert.h>
>#include <signal.h>
>#include <string.h>
>#include <stdio.h>
>#include <stdlib.h>
>#include <orbit/orbit.h>
>
>#include "adapter.h"
>#include "AdapterServer.h"
>#include "referenceutil.h"
>
>static CORBA_ORB orb = CORBA_OBJECT_NIL;
>static CORBA_Environment env;
>static CORBA_char *session_key;
>static appl_adapterinterface_proxy_AdapterServer adapterserver = CORBA_OBJECT_NIL;
>
>int adapter_init(char *host, char *username, char *password) {
> // Declare the std arguments
> int argc = 1;
> char *argv[1];
> CORBA_char *objref = NULL;
> CORBA_Object obj = CORBA_OBJECT_NIL;
>
> // Initialize exception handling
> CORBA_exception_init(&env);
>
> // Initialize ORB
> orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &env);
> if (env._major != CORBA_NO_EXCEPTION) {
> g_error(CORBA_exception_id (&env));
> CORBA_exception_free (&env);
> return SYSTEM_EXCEPTION;
> }
>
> // Getting IOR
> #ifdef _DEBUG
> g_print ("Reading service reference from socket\n");
> #endif
>
> if (getReference(host, &objref) != 0) {
> g_print("Failed to get object reference\n");
> return SYSTEM_EXCEPTION;
> }
>
> // Convert IOR to object reference
> #ifdef _DEBUG
> g_print ("Convert IOR to object. IOR is %s\n", objref);
> #endif
>
> // This is where I run into problem and get exception IDL:omg.org/CORBA/MARSHAL:1.0
> obj = (CORBA_Object)CORBA_ORB_string_to_object (orb, objref, &env);
> if (env._major != CORBA_NO_EXCEPTION) {
> g_error(CORBA_exception_id (&env));
> CORBA_exception_free (&env);
> return SYSTEM_EXCEPTION;
> }
>
> free(objref);
>
> #ifdef _DEBUG
> g_print("Cast object to adapterserver\n");
> #endif
>
> adapterserver = (appl_adapterinterface_proxy_AdapterServer)obj;
>
> // Logon to adapter server
> #ifdef _DEBUG
> g_print ("Logon on to FLEX\n");
> #endif
>
> session_key = appl_adapterinterface_proxy_AdapterServer_logon(adapterserver, username, password, &env);
> if (env._major == CORBA_SYSTEM_EXCEPTION) {
> g_error(CORBA_exception_id (&env));
> CORBA_exception_free (&env);
> return SYSTEM_EXCEPTION;
>
> } else if (env._major == CORBA_USER_EXCEPTION && \
> !strncmp (ex_appl_adapterinterface_except_C_LogonException, \
> CORBA_exception_id (&env), strlen (ex_appl_adapterinterface_except_C_LogonException))) {
> g_error(CORBA_exception_id (&env));
> CORBA_exception_free (&env);
> return LOGON_EXCEPTION;
> }
>
> #ifdef _DEBUG
> g_print ("Session key is %s \n", session_key);
> #endif
>
> return SUCCESS;
>}
>
>
>
>I build my lib (shared object) using the following makefile:
>
>PREFIX ?= /usr
>CC = gcc
>TARGETS=lib
>ORBIT_IDL=$(PREFIX)/bin/orbit-idl-2
>CFLAGS=-O -Wall -fpic -DORBIT2=1 -D_REENTRANT -I$(PREFIX)/include/orbit-2.0 \
> -I$(PREFIX)/include/linc-1.0 -I$(PREFIX)/include/glib-2.0 \
> -I$(PREFIX)/lib/glib-2.0/include -g -D_DEBUG
>LDFLAGS= -Wl,--export-dynamic -L$(PREFIX)/lib -lORBit-2 -llinc -lgmodule-2.0 \
> -ldl -lgobject-2.0 -lgthread-2.0 -lpthread -lglib-2.0 -lm \
> -lORBitCosNaming-2
>
>IDLOUT=AdapterServer-common.c AdapterServer-stubs.c AdapterServer.h
>
>all: $(IDLOUT) api lib
>
>api: adapter.o referenceutil.o AdapterServer-stubs.o AdapterServer-common.o
>
>$(IDLOUT): AdapterServer.idl
> $(ORBIT_IDL) --noskels AdapterServer.idl
>
>lib: api
> $(CC) -o libadapter.so -shared flexadapter.o referenceutil.o AdapterServer-common.o \
> AdapterServer-stubs.o $(LDFLAGS)
>
>clean:
> rm -rf *.o *~ $(IDLOUT)
>
>distclean: clean
> rm -rf libadapter.so
>
>
>
>What am I doing wrong? Any suggestions on how I should approach this problem?
>
>Thanks in advance
>
>Regards
>
>/Johan
>
>-------------------------------------------------
>Johan Antonsson johan.antonsson@ibitec.se
>-------------------------------------------------
>
>
>_______________________________________________
>orbit-list mailing list
>orbit-list@gnome.org
>http://mail.gnome.org/mailman/listinfo/orbit-list
>
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]