stubfactoryfactorystaticimpl.java

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

JAVA
132
字号
/* * @(#)StubFactoryFactoryStaticImpl.java	1.11 05/11/17 * * 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 javax.rmi.CORBA.Util;import javax.rmi.CORBA.Tie ;import org.omg.CORBA.CompletionStatus;import com.sun.corba.se.spi.presentation.rmi.PresentationManager;import com.sun.corba.se.impl.util.PackagePrefixChecker;import com.sun.corba.se.impl.util.Utility;import com.sun.corba.se.spi.logging.CORBALogDomains ;import com.sun.corba.se.impl.logging.ORBUtilSystemException ;public class StubFactoryFactoryStaticImpl extends     StubFactoryFactoryBase {    private ORBUtilSystemException wrapper = ORBUtilSystemException.get( 	CORBALogDomains.RPC_PRESENTATION ) ;    public PresentationManager.StubFactory createStubFactory(	String className, boolean isIDLStub, String remoteCodeBase, Class 	expectedClass, ClassLoader classLoader)    {	String stubName = null ;	if (isIDLStub) 	    stubName = Utility.idlStubName( className ) ;	else	    stubName = Utility.stubNameForCompiler( className ) ;	ClassLoader expectedTypeClassLoader = 	    (expectedClass == null ? classLoader : 	    expectedClass.getClassLoader());	// The old code was optimized to try to guess which way to load classes	// first.  The real stub class name could either be className or 	// "org.omg.stub." + className.  We will compute this as follows:	// If stubName starts with a "forbidden" package, try the prefixed	// version first, otherwise try the non-prefixed version first.	// In any case, try both forms if necessary.	String firstStubName = stubName ;	String secondStubName = stubName ;	if (PackagePrefixChecker.hasOffendingPrefix(stubName))	    firstStubName = PackagePrefixChecker.packagePrefix() + stubName ;	else	    secondStubName = PackagePrefixChecker.packagePrefix() + stubName ;	Class clz = null;	try {	    clz = Util.loadClass( firstStubName, remoteCodeBase, 		expectedTypeClassLoader ) ;	} catch (ClassNotFoundException e1) {	    // log only at FINE level	    wrapper.classNotFound1( CompletionStatus.COMPLETED_MAYBE,		e1, firstStubName ) ;	    try {		clz = Util.loadClass( secondStubName, remoteCodeBase, 		    expectedTypeClassLoader ) ;	    } catch (ClassNotFoundException e2) {		throw wrapper.classNotFound2( 		    CompletionStatus.COMPLETED_MAYBE, e2, secondStubName ) ;	    }	}	// XXX Is this step necessary, or should the Util.loadClass	// algorithm always produce a valid class if the setup is correct?	// Does the OMG standard algorithm need to be changed to include	// this step?        if ((clz == null) || 	    ((expectedClass != null) && !expectedClass.isAssignableFrom(clz))) {	    try {		ClassLoader cl = Thread.currentThread().getContextClassLoader();		if (cl == null)		    cl = ClassLoader.getSystemClassLoader();		clz = cl.loadClass(className);	    } catch (Exception exc) {		// XXX make this a system exception		IllegalStateException ise = new IllegalStateException( 		    "Could not load class " + stubName ) ;		ise.initCause( exc ) ;		throw ise ;	    }        }	return new StubFactoryStaticImpl( clz ) ;    }    public Tie getTie( Class cls )    {	Class tieClass = null ;	String className = Utility.tieName(cls.getName());	// XXX log exceptions at FINE level	try {	    try {		//_REVISIT_ The spec does not specify a loadingContext parameter for		//the following call.  Would it be useful to pass one?  		tieClass = Utility.loadClassForClass(className, Util.getCodebase(cls), 		    null, cls, cls.getClassLoader());		return (Tie) tieClass.newInstance();	    } catch (Exception err) {		tieClass = Utility.loadClassForClass(		    PackagePrefixChecker.packagePrefix() + className, 		    Util.getCodebase(cls), null, cls, cls.getClassLoader());		return (Tie) tieClass.newInstance();	    }        } catch (Exception err) {            return null;            }    }    public boolean createsDynamicStubs()     {	return false ;    }}

⌨️ 快捷键说明

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