Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在CORBA中使用拦截器操作发送到远程对象的参数_Java_Corba - Fatal编程技术网

Java 如何在CORBA中使用拦截器操作发送到远程对象的参数

Java 如何在CORBA中使用拦截器操作发送到远程对象的参数,java,corba,Java,Corba,CORBA的新功能,但可以建立从客户端到服务器的远程方法调用。当使用拦截器并尝试加密远程方法的参数时,它抛出如下 Failed to initialise ORB: org.omg.CORBA.NO_RESOURCES: vmcid: OMG minor code: 1 completed: No org.omg.CORBA.NO_RESOURCES: vmcid: OMG minor code: 1completed: No at com.sun.corba.se.impl.lo

CORBA的新功能,但可以建立从客户端到服务器的远程方法调用。当使用拦截器并尝试加密远程方法的参数时,它抛出如下

Failed to initialise ORB: org.omg.CORBA.NO_RESOURCES:   vmcid: OMG  minor code: 1  completed: No org.omg.CORBA.NO_RESOURCES:   vmcid: OMG  minor code: 1completed: No at com.sun.corba.se.impl.logging.OMGSystemException.piOperationNotSupported1(Unknown Source)
at com.sun.corba.se.impl.logging.OMGSystemException.piOperationNotSupported1(Unknown Source)
at com.sun.corba.se.impl.interceptors.ClientRequestInfoImpl.arguments(Unknown Source)
at orb.CustomClientInterceptor.send_request(CustomClientInterceptor.java:23)
从拦截器中,我试图访问参数并对它们进行加密,如下所示

public void send_request( ClientRequestInfo ri )
{
    System.out.println( ri.arguments() );
    System.out.println( "Arguments.." );
    logger( ri, "send_request" );
}
public void send_request( ClientRequestInfo ri )
{
    if(ri.operation().equals( "processPayment" ))
    {
        System.out.println( "################# CLIENT SIDE ###############" );
        int count = 0;
        for(Parameter param : ri.arguments())
        {
            System.out.println( "Arg : "+count );
            System.out.println( param.argument.extract_string());
            param.argument.insert_string( EncryptionDecryption.encrypt( param.argument.extract_string() ) );
            count++;
        }
    }
    System.out.println( "Arguments.." );
    logger( ri, "send_request" );
}
但甚至无法访问它们,这会抛出上述错误。拦截方法正在调用fine。你能给我一些代码或链接吗


提前感谢

我找到了答案,如果将来有人点击这个

除非对CORBA对象的调用是DII或DSI调用,否则我们无法操纵拦截器中的参数。因此,首先你需要在这两种情况下打电话。我是通过DII做的。代码如下

                //-ORBInitialPort 1050 -ORBInitialHost localhost
                Properties p = new Properties();
                p.put("org.omg.PortableInterceptor.ORBInitializerClass.orb.InterceptorORBInitializer", "");
                //ORB orb = ORB.init(args, p);

                String[] orbArgs = { "-ORBInitialHost", "localhost", "-ORBInitialPort", "1050" };
                //NO_NEED ORB orb = ORB.init( orbArgs, null );
                orb = ORB.init(orbArgs, p);
                //objRef = orb.resolve_initial_references( "NameService" );
                //ncRef = NamingContextExtHelper.narrow( objRef );

                //DII Additional configs
                org.omg.CORBA.Object ncRef = orb.resolve_initial_references ("NameService"); 
                NamingContext nc = NamingContextHelper.narrow (ncRef); 
                NameComponent nComp = new NameComponent ("ABC", ""); 
                NameComponent [] path = {nComp}; 
                objRef = nc.resolve (path); 
然后执行DII调用,我这里有一些混合代码,但您会明白该怎么做

        NVList argList = orb.create_list (valueMap.size()); 
        for (Map.Entry<String, String> entry : valueMap.entrySet()) {
            Any argument = orb.create_any (); 
            argument.insert_string (entry.getValue()); 
            argList.add_value (entry.getKey().toLowerCase(), argument, org.omg.CORBA.ARG_IN.value); 
        }


        //Result
        Any result = orb.create_any (); 
        result.insert_string( null ); 
        NamedValue resultVal = orb.create_named_value ("result", result, org.omg.CORBA.ARG_OUT.value); 

        //Invoking Method
        Request thisReq = objRef._create_request (null, methodName, argList, resultVal); 
        thisReq.invoke (); 

        //Extract Result
        result = thisReq.result().value (); 

这不是,这是直接CORBA编程。遗憾的是,并非所有的拦截都在J2SE中得到支持。CORBA有拦截器???@antoniosss当然,包括服务器端和客户端。请参阅。@Antoniossss如果您想拥有一个拦截器,然后操纵远程对象的参数,请检查代码。@user207421,我发现只有DII和DSI调用才允许访问和操纵远程对象的参数。看看我的答案很好,做得很好,我为此奋斗了一段时间,但没有找到答案。