reflectivetie.java

来自「JAVA 所有包」· Java 代码 · 共 159 行

JAVA
159
字号
/* * @(#)ReflectiveTie.java	1.14 06/08/12 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.impl.presentation.rmi ;import java.rmi.Remote;import java.rmi.RemoteException;import javax.rmi.CORBA.Tie;import java.lang.reflect.Method ;import java.lang.reflect.InvocationTargetException ;import org.omg.CORBA.SystemException;import org.omg.CORBA_2_3.portable.InputStream;import org.omg.CORBA_2_3.portable.OutputStream;import org.omg.CORBA.portable.ResponseHandler;import org.omg.CORBA.portable.UnknownException;import org.omg.PortableServer.Servant;import org.omg.PortableServer.POA;import org.omg.PortableServer.POAManager;import com.sun.corba.se.spi.presentation.rmi.PresentationManager ;import com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator ;import com.sun.corba.se.spi.presentation.rmi.DynamicMethodMarshaller ;import com.sun.corba.se.spi.orb.ORB ;import com.sun.corba.se.impl.logging.ORBUtilSystemException ;import com.sun.corba.se.impl.oa.poa.POAManagerImpl ;public final class ReflectiveTie extends Servant implements Tie {    private Remote target = null ;    private PresentationManager pm ;    private PresentationManager.ClassData classData = null ;    private ORBUtilSystemException wrapper = null ;    public ReflectiveTie( PresentationManager pm, ORBUtilSystemException wrapper )    {	SecurityManager s = System.getSecurityManager(); 	if (s != null) { 	    s.checkPermission(new DynamicAccessPermission("access")); 	}	this.pm = pm ;	this.wrapper = wrapper ;    }    public String[] _all_interfaces(org.omg.PortableServer.POA poa, 	byte[] objectId)    {	return classData.getTypeIds() ;    }    public void setTarget(Remote target)     {        this.target = target;	if (target == null) {	    classData = null ;	} else {	    Class targetClass = target.getClass() ;	    classData = pm.getClassData( targetClass ) ;	}    }        public Remote getTarget()     {        return target;    }        public org.omg.CORBA.Object thisObject()     {        return _this_object();    }        public void deactivate()     {        try{	    _poa().deactivate_object(_poa().servant_to_id(this));        } catch (org.omg.PortableServer.POAPackage.WrongPolicy exception){	    // ignore         } catch (org.omg.PortableServer.POAPackage.ObjectNotActive exception){	    // ignore         } catch (org.omg.PortableServer.POAPackage.ServantNotActive exception){	    // ignore         }    }        public org.omg.CORBA.ORB orb() {        return _orb();    }        public void orb(org.omg.CORBA.ORB orb) {        try {	    ORB myORB = (ORB)orb ;            ((org.omg.CORBA_2_3.ORB)orb).set_delegate(this);        } catch (ClassCastException e) {	    throw wrapper.badOrbForServant( e ) ;        }    }        public org.omg.CORBA.portable.OutputStream  _invoke(String method, 	org.omg.CORBA.portable.InputStream _in, ResponseHandler reply)     {	Method javaMethod = null ;	DynamicMethodMarshaller dmm = null;        try {            InputStream in = (InputStream) _in;	    javaMethod = classData.getIDLNameTranslator().getMethod( method ) ;	    if (javaMethod == null)		throw wrapper.methodNotFoundInTie( method, 		    target.getClass().getName() ) ;	    dmm = pm.getDynamicMethodMarshaller( javaMethod ) ;	    Object[] args = dmm.readArguments( in ) ;	    Object result = javaMethod.invoke( target, args ) ;	    OutputStream os = (OutputStream)reply.createReply() ;	    dmm.writeResult( os, result ) ; 	    return os ;	} catch (IllegalAccessException ex) {	    throw wrapper.invocationErrorInReflectiveTie( ex, 		javaMethod.getName(), 		    javaMethod.getDeclaringClass().getName() ) ;	} catch (IllegalArgumentException ex) {	    throw wrapper.invocationErrorInReflectiveTie( ex, 		javaMethod.getName(), 		    javaMethod.getDeclaringClass().getName() ) ;	} catch (InvocationTargetException ex) {	    // Unwrap the actual exception so that it can be wrapped by an	    // UnknownException or thrown if it is a system exception.	    // This is expected in the server dispatcher code.	    Throwable thr = ex.getCause() ;	    if (thr instanceof SystemException)		throw (SystemException)thr ;	    else if ((thr instanceof Exception) && 		dmm.isDeclaredException( thr )) {		OutputStream os = (OutputStream)reply.createExceptionReply() ;		dmm.writeException( os, (Exception)thr ) ;		return os ;		    } else		throw new UnknownException( thr ) ;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?