You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by si...@apache.org on 2010/12/24 21:32:08 UTC

svn commit: r1052595 [3/11] - in /incubator/river/site/trunk/content/river/doc/api/net/jini/jeri: ./ class-use/ connection/ http/ kerberos/ ssl/ tcp/

Added: incubator/river/site/trunk/content/river/doc/api/net/jini/jeri/BasicInvocationDispatcher.html
URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/jeri/BasicInvocationDispatcher.html?rev=1052595&view=auto
==============================================================================
--- incubator/river/site/trunk/content/river/doc/api/net/jini/jeri/BasicInvocationDispatcher.html (added)
+++ incubator/river/site/trunk/content/river/doc/api/net/jini/jeri/BasicInvocationDispatcher.html Fri Dec 24 20:32:07 2010
@@ -0,0 +1,1094 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_15) on Mon Mar 08 17:46:18 EST 2010 -->
+<TITLE>
+BasicInvocationDispatcher (Apache River v2.1.2-SNAPSHOT API Documentation)
+</TITLE>
+
+<META NAME="keywords" CONTENT="net.jini.jeri.BasicInvocationDispatcher class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="BasicInvocationDispatcher (Apache River v2.1.2-SNAPSHOT API Documentation)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/BasicInvocationDispatcher.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../net/jini/jeri/BasicILFactory.html" title="class in net.jini.jeri"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../net/jini/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?net/jini/jeri/BasicInvocationDispatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="BasicInvocationDispatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+net.jini.jeri</FONT>
+<BR>
+Class BasicInvocationDispatcher</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>net.jini.jeri.BasicInvocationDispatcher</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../net/jini/jeri/InvocationDispatcher.html" title="interface in net.jini.jeri">InvocationDispatcher</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sun/jini/phoenix/AccessILFactory.AccessDispatcher.html" title="class in com.sun.jini.phoenix">AccessILFactory.AccessDispatcher</A>, <A HREF="../../../com/sun/jini/phoenix/SystemAccessILFactory.SystemDispatcher.html" title="class in com.sun.jini.phoenix">SystemAccessILFactory.SystemDispatcher</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public class <B>BasicInvocationDispatcher</B><DT>extends <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../net/jini/jeri/InvocationDispatcher.html" title="interface in net.jini.jeri">InvocationDispatcher</A></DL>
+</PRE>
+
+<P>
+A basic implementation of the <A HREF="../../../net/jini/jeri/InvocationDispatcher.html" title="interface in net.jini.jeri"><CODE>InvocationDispatcher</CODE></A> interface,
+ providing preinvocation access control for
+ remote objects exported using <A HREF="../../../net/jini/jeri/BasicJeriExporter.html" title="class in net.jini.jeri"><CODE>BasicJeriExporter</CODE></A>.
+
+ <p>This invocation dispatcher handles incoming remote method invocations
+ initiated by proxies using <A HREF="../../../net/jini/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><CODE>BasicInvocationHandler</CODE></A>, and expects
+ that a dispatched request, encapsulated in the <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri"><CODE>InboundRequest</CODE></A>
+ object passed to the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method, was sent using
+ the protocol implemented by <code>BasicInvocationHandler</code>.
+
+ <p>A basic permission-based preinvocation access control mechanism is
+ provided. A permission class can be specified when an invocation
+ dispatcher is constructed; instances of that class are constructed using
+ either a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect"><CODE>Method</CODE></A> instance or a <code>String</code> representing
+ the remote method being invoked. The class can have a constructor with a
+ <code>Method</code> parameter to permit an arbitrary mapping to the
+ actual permission target name and actions; otherwise, the class must
+ have a constructor taking the fully qualified name of the remote method
+ as a <code>String</code>. For each incoming call on a remote object, the
+ client subject must be granted the associated permission for that remote
+ method.  (Access control for an individual remote method can effectively
+ be disabled by granting the associated permission to all protection
+ domains.) A simple subclass of <A HREF="../../../net/jini/security/AccessPermission.html" title="class in net.jini.security"><CODE>AccessPermission</CODE></A> is typically
+ used as the permission class.
+
+ <p>Other access control mechanisms can be implemented by subclassing this
+ class and overriding the various protected methods.
+ 
+ <p>This class is designed to support dispatching remote calls to the
+ <A HREF="../../../net/jini/security/proxytrust/ProxyTrust.html#getProxyVerifier()"><CODE>ProxyTrust.getProxyVerifier</CODE></A> method
+ to the local <A HREF="../../../net/jini/security/proxytrust/ServerProxyTrust.html#getProxyVerifier()"><CODE>ServerProxyTrust.getProxyVerifier</CODE></A> method of a remote object, to allow a
+ remote object to be exported in such a way that its proxy can be
+ directly trusted by clients as well as in such a way that its proxy can
+ be trusted by clients using <A HREF="../../../net/jini/security/proxytrust/ProxyTrustVerifier.html" title="class in net.jini.security.proxytrust"><CODE>ProxyTrustVerifier</CODE></A>.
+<P>
+
+<P>
+<DL>
+<DT><B>Since:</B></DT>
+  <DD>2.0</DD>
+<DT><B>Author:</B></DT>
+  <DD>Sun Microsystems, Inc.</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../net/jini/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><CODE>BasicInvocationHandler</CODE></A><DT><B>Implementation Specifics:</B></DT>
+  <DD>This implementation uses the following system property:
+ <dl>
+ <dt><code>com.sun.jini.jeri.server.suppressStackTrace</code>
+ <dd>If <code>true</code>, removes server-side stack traces before
+ marshalling an exception thrown as a result of a remote call.  The
+ default value is <code>false</code>.
+ </dl>
+ 
+ <p>This implementation uses the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Logger.html" title="class or interface in java.util.logging"><CODE>Logger</CODE></A> named
+ <code>net.jini.jeri.BasicInvocationDispatcher</code> to log
+ information at the following levels:
+
+ <table summary="Describes what is logged by BasicInvocationDispatcher at
+        various logging levels" border=1 cellpadding=5>
+
+ <tr> <th> Level <th> Description
+
+ <tr> <td> <A HREF="../../../com/sun/jini/logging/Levels.html#FAILED"><CODE>FAILED</CODE></A> <td> exception that caused a request
+ to be aborted 
+
+ <tr> <td> <A HREF="../../../com/sun/jini/logging/Levels.html#FAILED"><CODE>FAILED</CODE></A> <td> exceptional result of a
+ remote call 
+
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINE</CODE></A> <td> incoming remote call
+ 
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINE</CODE></A> <td> successful return of remote call
+
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINEST" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A> <td> more detailed information on
+ the above (for example, actual argument and return values)
+
+ </table></DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#BasicInvocationDispatcher(java.util.Collection, net.jini.jeri.ServerCapabilities, net.jini.core.constraint.MethodConstraints, java.lang.Class, java.lang.ClassLoader)">BasicInvocationDispatcher</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;methods,
+                          <A HREF="../../../net/jini/jeri/ServerCapabilities.html" title="interface in net.jini.jeri">ServerCapabilities</A>&nbsp;serverCapabilities,
+                          <A HREF="../../../net/jini/core/constraint/MethodConstraints.html" title="interface in net.jini.core.constraint">MethodConstraints</A>&nbsp;serverConstraints,
+                          <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;permissionClass,
+                          <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A>&nbsp;loader)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an invocation dispatcher to receive incoming remote calls
+ for the specified methods, for a server and transport with the
+ specified capabilities, enforcing the specified constraints,
+ performing preinvocation access control using the specified
+ permission class (if any).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#checkAccess(java.rmi.Remote, java.lang.reflect.Method, net.jini.core.constraint.InvocationConstraints, java.util.Collection)">checkAccess</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+            <A HREF="../../../net/jini/core/constraint/InvocationConstraints.html" title="class in net.jini.core.constraint">InvocationConstraints</A>&nbsp;constraints,
+            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks that the client has permission to invoke the specified method on
+ the specified remote object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#checkClientPermission(java.security.Permission)">checkClientPermission</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/Permission.html" title="class or interface in java.security">Permission</A>&nbsp;permission)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks that the client subject for the current remote call has the
+ specified permission.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#checkPermissionClass(java.lang.Class)">checkPermissionClass</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;permissionClass)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks that the specified class is a valid permission class for use in
+ preinvocation access control.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalInputStream(java.lang.Object, net.jini.jeri.InboundRequest, boolean, java.util.Collection)">createMarshalInputStream</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;impl,
+                         <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+                         boolean&nbsp;integrity,
+                         <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new marshal input stream to use to read objects from the
+ request input stream obtained by invoking the <A HREF="../../../net/jini/jeri/InboundRequest.html#getRequestInputStream()"><CODE>getRequestInputStream</CODE></A> method
+ on the given <code>request</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalOutputStream(java.lang.Object, java.lang.reflect.Method, net.jini.jeri.InboundRequest, java.util.Collection)">createMarshalOutputStream</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;impl,
+                          <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                          <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+                          <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new marshal output stream to use to write objects to the
+ response output stream obtained by invoking the <A HREF="../../../net/jini/jeri/InboundRequest.html#getResponseOutputStream()"><CODE>getResponseOutputStream</CODE></A>
+ method on the given <code>request</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)">dispatch</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+         <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+         <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dispatches the specified inbound request to the specified remote object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#getClassLoader()">getClassLoader</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the class loader specified during construction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], java.util.Collection)">invoke</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+       <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+       <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>[]&nbsp;args,
+       <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes the specified <code>method</code> on the specified remote
+ object <code>impl</code>, with the specified arguments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#marshalReturn(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object, java.io.ObjectOutputStream, java.util.Collection)">marshalReturn</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+              <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+              <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;returnValue,
+              <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;out,
+              <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshals the specified return value for the specified remote method
+ to the marshal output stream, <code>out</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#marshalThrow(java.rmi.Remote, java.lang.reflect.Method, java.lang.Throwable, java.io.ObjectOutputStream, java.util.Collection)">marshalThrow</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
+             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;out,
+             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshals the <code>throwable</code> for the specified remote method
+ to the marshal output stream, <code>out</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#unmarshalArguments(java.rmi.Remote, java.lang.reflect.Method, java.io.ObjectInputStream, java.util.Collection)">unmarshalArguments</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                   <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                   <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A>&nbsp;in,
+                   <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unmarshals the arguments for the specified remote <code>method</code>
+ from the specified marshal input stream, <code>in</code>, and returns an
+ <code>Object</code> array containing the arguments read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#unmarshalMethod(java.rmi.Remote, java.io.ObjectInputStream, java.util.Collection)">unmarshalMethod</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A>&nbsp;in,
+                <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unmarshals a method representation from the marshal input stream,
+ <code>in</code>, and returns the <code>Method</code> object
+ corresponding to that representation.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://
 java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="BasicInvocationDispatcher(java.util.Collection, net.jini.jeri.ServerCapabilities, net.jini.core.constraint.MethodConstraints, java.lang.Class, java.lang.ClassLoader)"><!-- --></A><H3>
+BasicInvocationDispatcher</H3>
+<PRE>
+public <B>BasicInvocationDispatcher</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;methods,
+                                 <A HREF="../../../net/jini/jeri/ServerCapabilities.html" title="interface in net.jini.jeri">ServerCapabilities</A>&nbsp;serverCapabilities,
+                                 <A HREF="../../../net/jini/core/constraint/MethodConstraints.html" title="interface in net.jini.core.constraint">MethodConstraints</A>&nbsp;serverConstraints,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;permissionClass,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A>&nbsp;loader)
+                          throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/ExportException.html" title="class or interface in java.rmi.server">ExportException</A></PRE>
+<DL>
+<DD>Creates an invocation dispatcher to receive incoming remote calls
+ for the specified methods, for a server and transport with the
+ specified capabilities, enforcing the specified constraints,
+ performing preinvocation access control using the specified
+ permission class (if any).  The specified class loader is used by
+ the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalInputStream(java.lang.Object, net.jini.jeri.InboundRequest, boolean, java.util.Collection)"><CODE>createMarshalInputStream</CODE></A>
+ method.
+
+ <p>For each combination of constraints that might need to be
+ enforced (obtained by calling the <A HREF="../../../net/jini/core/constraint/MethodConstraints.html#possibleConstraints()"><CODE>possibleConstraints</CODE></A> method on
+ the specified server constraints, or using an empty constraints
+ instance if the specified server constraints instance is
+ <code>null</code>), calling the <A HREF="../../../net/jini/jeri/ServerCapabilities.html#checkConstraints(net.jini.core.constraint.InvocationConstraints)"><CODE>checkConstraints</CODE></A> method of the
+ specified capabilities object with those constraints must return
+ constraints containing at most an <A HREF="../../../net/jini/core/constraint/Integrity.html" title="class in net.jini.core.constraint"><CODE>Integrity</CODE></A> constraint as a
+ requirement, or an <code>ExportException</code> is thrown.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>methods</CODE> - a collection of <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect"><CODE>Method</CODE></A> instances for the
+                remote methods<DD><CODE>serverCapabilities</CODE> - the transport capabilities of the server<DD><CODE>serverConstraints</CODE> - the server constraints, or <code>null</code><DD><CODE>permissionClass</CODE> - the permission class, or <code>null</code><DD><CODE>loader</CODE> - the class loader, or <code>null</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/SecurityException.html" title="class or interface in java.lang">SecurityException</A></CODE> - if the permission class is not
+                <code>null</code> and is in a named package and a
+                security manager exists and invoking its
+                <code>checkPackageAccess</code> method with the package
+                name of the permission class throws a
+                <code>SecurityException</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the permission class
+                is abstract, is not <code>public</code>, is not a subclass
+                of <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/Permission.html" title="class or interface in java.security"><CODE>Permission</CODE></A>, or does not have a public
+                constructor that has either one <code>String</code>
+                parameter or one <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect"><CODE>Method</CODE></A> parameter and has no
+                declared exceptions, or if any element of
+                <code>methods</code> is not a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect"><CODE>Method</CODE></A> instance
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>methods</code> or
+                <code>serverCapabilities</code> is <code>null</code>, or if
+                <code>methods</code> contains a <code>null</code> element
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/ExportException.html" title="class or interface in java.rmi.server">ExportException</A></CODE> - if any of the possible server constraints
+                cannot be satisfied according to the specified server
+                capabilities</DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getClassLoader()"><!-- --></A><H3>
+getClassLoader</H3>
+<PRE>
+protected final <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassLoader.html" title="class or interface in java.lang">ClassLoader</A> <B>getClassLoader</B>()</PRE>
+<DL>
+<DD>Returns the class loader specified during construction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the class loader</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkPermissionClass(java.lang.Class)"><!-- --></A><H3>
+checkPermissionClass</H3>
+<PRE>
+public static void <B>checkPermissionClass</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&nbsp;permissionClass)</PRE>
+<DL>
+<DD>Checks that the specified class is a valid permission class for use in
+ preinvocation access control.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>permissionClass</CODE> - the permission class, or <code>null</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the permission class is abstract,
+ is not a subclass of <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/Permission.html" title="class or interface in java.security"><CODE>Permission</CODE></A>, or does not have a public
+ constructor that has either one <code>String</code> parameter or one
+ <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect"><CODE>Method</CODE></A> parameter and has no declared exceptions</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><!-- --></A><H3>
+dispatch</H3>
+<PRE>
+public void <B>dispatch</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                     <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+                     <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</PRE>
+<DL>
+<DD>Dispatches the specified inbound request to the specified remote object.
+ When used in conjunction with <A HREF="../../../net/jini/jeri/BasicJeriExporter.html" title="class in net.jini.jeri"><CODE>BasicJeriExporter</CODE></A>, this
+ method is called in a context that has the security context and
+ context class loader specified by
+ <A HREF="../../../net/jini/jeri/BasicJeriExporter.html#export(java.rmi.Remote)"><CODE>BasicJeriExporter.export</CODE></A>.
+ 
+ <p><code>BasicInvocationDispatcher</code> implements this method to
+ execute the following actions in order:
+
+ <ul>
+ <li>A byte specifying the marshal stream protocol version is read
+ from the request input stream of the inbound request. If any
+ exception is thrown when reading this byte, the inbound request is
+ aborted and this method returns. If the byte is not
+ <code>0x00</code>, two byte values of <code>0x00</code> (indicating
+ a marshal stream protocol version mismatch) are written to the
+ response output stream of the inbound request, the output stream is
+ closed, and this method returns.
+ 
+ <li>If the version byte is <code>0x00</code>, a second byte
+ specifying object integrity is read from the same stream.  If any
+ exception is thrown when reading this byte, the inbound request is
+ aborted and this method returns.  Object integrity will be enforced
+ if the value read is not <code>0x00</code>, but will not be enforced
+ if the value is <code>0x00</code>. An <A HREF="../../../net/jini/io/context/IntegrityEnforcement.html" title="interface in net.jini.io.context"><CODE>IntegrityEnforcement</CODE></A> element is then added to
+ the server context, reflecting whether or not object integrity is
+ being enforced.
+
+ <li>The <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalInputStream(java.lang.Object, net.jini.jeri.InboundRequest, boolean, java.util.Collection)"><CODE>createMarshalInputStream</CODE></A>
+ method of this invocation dispatcher is called, passing the remote
+ object, the inbound request, a boolean indicating if object
+ integrity is being enforced, and the server context, to create the
+ marshal input stream for unmarshalling the request.
+
+ <li>The <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#unmarshalMethod(java.rmi.Remote, java.io.ObjectInputStream, java.util.Collection)"><CODE>unmarshalMethod</CODE></A> of this
+ invocation dispatcher is called with the remote object, the marshal
+ input stream, and the server context to obtain the remote method.
+
+ <li> The <A HREF="../../../net/jini/jeri/InboundRequest.html#checkConstraints(net.jini.core.constraint.InvocationConstraints)"><CODE>checkConstraints</CODE></A>
+ method of the inbound request is called with the constraints that
+ must be enforced for that remote method, obtained by passing the
+ remote method to the <A HREF="../../../net/jini/core/constraint/MethodConstraints.html#getConstraints(java.lang.reflect.Method)"><CODE>getConstraints</CODE></A> method of this invocation dispatcher's server
+ constraints, and adding <A HREF="../../../net/jini/core/constraint/Integrity.html#YES"><CODE>Integrity.YES</CODE></A> as a
+ requirement if object integrity is being enforced. If the
+ unfulfilled requirements returned by <code>checkConstraints</code>
+ contains a constraint that is not an instance of <A HREF="../../../net/jini/core/constraint/Integrity.html" title="class in net.jini.core.constraint"><CODE>Integrity</CODE></A>
+ or if integrity is not being enforced and the returned requirements
+ contains the element <code>Integrity.YES</code>, an
+ <code>UnsupportedConstraintException</code> is sent back to the
+ caller as described further below. Otherwise, the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#checkAccess(java.rmi.Remote, java.lang.reflect.Method, net.jini.core.constraint.InvocationConstraints, java.util.Collection)"><CODE>checkAccess</CODE></A> method of this invocation dispatcher is
+ called with the remote object, the remote method, the enforced
+ constraints, and the server context.
+
+ <li>The method arguments are obtained by calling the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#unmarshalArguments(java.rmi.Remote, java.lang.reflect.Method, java.io.ObjectInputStream, java.util.Collection)"><CODE>unmarshalArguments</CODE></A> method of this invocation
+ dispatcher with the remote object, the remote method, the marshal
+ input stream, and the server context.
+ 
+ <li>If any exception is thrown during this unmarshalling, that exception
+ is sent back to the caller as described further below; however, if the
+ exception is a checked exception (<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io"><CODE>IOException</CODE></A>,
+ <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang"><CODE>ClassNotFoundException</CODE></A>, or <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NoSuchMethodException.html" title="class or interface in java.lang"><CODE>NoSuchMethodException</CODE></A>), the
+ exception is first wrapped in an <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/UnmarshalException.html" title="class or interface in java.rmi"><CODE>UnmarshalException</CODE></A> and the
+ wrapped exception is sent back.
+
+ <li>Otherwise, if unmarshalling is successful, the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], java.util.Collection)"><CODE>invoke</CODE></A> method of this invocation dispatcher is then called with the
+ remote object, the remote method, the arguments returned by
+ <code>unmarshalArguments</code>, and the server context. If
+ <code>invoke</code> throws an exception, that exception is sent back
+ to the caller as described further below.
+
+ <li>The input stream is closed whether or not an exception was
+ thrown unmarshalling the arguments or invoking the method.
+
+ <li>If <code>invoke</code> returns normally, a byte value of
+ <code>0x01</code> is written to the response output stream of the
+ inbound request. Then the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalOutputStream(java.lang.Object, java.lang.reflect.Method, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>createMarshalOutputStream</CODE></A> method of this invocation dispatcher is
+ called, passing the remote object, the remote method, the inbound
+ request, and the server context, to create the marshal output stream
+ for marshalling the response. Then the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#marshalReturn(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object, java.io.ObjectOutputStream, java.util.Collection)"><CODE>marshalReturn</CODE></A> method of this invocation dispatcher is called with
+ the remote object, the remote method, the value returned by
+ <code>invoke</code>, the marshal output stream, and the server
+ context. Then the marshal output stream is closed. Any exception
+ thrown during this marshalling is ignored.
+ 
+ <li>When an exception is sent back to the caller, a byte value of
+ <code>0x02</code> is written to the response output stream of the
+ inbound request. Then a marshal output stream is created by calling
+ the <code>createMarshalOutputStream</code> method as described above
+ (but with a <code>null</code> remote method if one was not
+ successfully unmarshalled). Then the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#marshalThrow(java.rmi.Remote, java.lang.reflect.Method, java.lang.Throwable, java.io.ObjectOutputStream, java.util.Collection)"><CODE>marshalThrow</CODE></A> method of this invocation dispatcher is called with
+ the remote object, the remote method (or <code>null</code> if one
+ was not successfully unmarshalled), the exception, the marshal
+ output stream, and the server context. Then the marshal output
+ stream is closed. Any exception thrown during this marshalling is
+ ignored. If the exception being sent back is a
+ <code>RemoteException</code>, it is wrapped in a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/ServerException.html" title="class or interface in java.rmi"><CODE>ServerException</CODE></A> and the wrapped exception is passed to
+ <code>marshalThrow</code>. If the exception being sent back is an
+ <code>Error</code>, it is wrapped in a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/ServerError.html" title="class or interface in java.rmi"><CODE>ServerError</CODE></A> and the
+ wrapped exception is passed to <code>marshalThrow</code>. If the
+ exception being sent back occurred before or during the call to
+ <code>unmarshalMethod</code>, then the remote method passed to
+ <code>marshalThrow</code> is <code>null</code>.
+ </ul>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../net/jini/jeri/InvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)">dispatch</A></CODE> in interface <CODE><A HREF="../../../net/jini/jeri/InvocationDispatcher.html" title="interface in net.jini.jeri">InvocationDispatcher</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - a remote object<DD><CODE>request</CODE> - inbound request object for reading arguments and
+                writing the result<DD><CODE>context</CODE> - a modifiable server context collection
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if any argument is <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="createMarshalInputStream(java.lang.Object, net.jini.jeri.InboundRequest, boolean, java.util.Collection)"><!-- --></A><H3>
+createMarshalInputStream</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A> <B>createMarshalInputStream</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;impl,
+                                                     <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+                                                     boolean&nbsp;integrity,
+                                                     <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                                              throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Returns a new marshal input stream to use to read objects from the
+ request input stream obtained by invoking the <A HREF="../../../net/jini/jeri/InboundRequest.html#getRequestInputStream()"><CODE>getRequestInputStream</CODE></A> method
+ on the given <code>request</code>.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method as
+ follows:
+
+ <p>First, a class loader is selected to use as the
+ <code>defaultLoader</code> and the <code>verifierLoader</code> for
+ the marshal input stream instance.  If the class loader specified at
+ construction is not <code>null</code>, the selected loader is that
+ loader.  Otherwise, if a security manager exists, its <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/SecurityManager.html#checkPermission(java.security.Permission)" title="class or interface in java.lang"><CODE>checkPermission</CODE></A> method is invoked
+ with the permission <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/RuntimePermission.html" title="class or interface in java.lang"><CODE>RuntimePermission</CODE></A>("getClassLoader")</code>; this invocation may
+ throw a <code>SecurityException</code>.  If the above security check
+ succeeds, the selected loader is the class loader of
+ <code>impl</code>'s class.
+
+ <p>This method returns a new <A HREF="../../../net/jini/io/MarshalInputStream.html" title="class in net.jini.io"><CODE>MarshalInputStream</CODE></A> instance
+ constructed with the input stream (obtained from the
+ <code>request</code> as specified above) for the input stream
+ <code>in</code>, the selected loader for <code>defaultLoader</code>
+ and <code>verifierLoader</code>, the boolean <code>integrity</code>
+ for <code>verifyCodebaseIntegrity</code>, and an unmodifiable view
+ of <code>context</code> for the <code>context</code> collection.
+ The <A HREF="../../../net/jini/io/MarshalInputStream.html#useCodebaseAnnotations()"><CODE>useCodebaseAnnotations</CODE></A> method is invoked on the created stream
+ before it is returned.
+
+ <p>A subclass can override this method to control how the marshal input
+ stream is created or implemented.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>request</CODE> - the inbound request<DD><CODE>integrity</CODE> - <code>true</code> if object integrity is being
+                enforced for the remote call, and <code>false</code> otherwise<DD><CODE>context</CODE> - the server context
+<DT><B>Returns:</B><DD>a new marshal input stream for unmarshalling a call request
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if any argument is <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="createMarshalOutputStream(java.lang.Object, java.lang.reflect.Method, net.jini.jeri.InboundRequest, java.util.Collection)"><!-- --></A><H3>
+createMarshalOutputStream</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A> <B>createMarshalOutputStream</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;impl,
+                                                       <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                                                       <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri">InboundRequest</A>&nbsp;request,
+                                                       <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                                                throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Returns a new marshal output stream to use to write objects to the
+ response output stream obtained by invoking the <A HREF="../../../net/jini/jeri/InboundRequest.html#getResponseOutputStream()"><CODE>getResponseOutputStream</CODE></A>
+ method on the given <code>request</code>.
+
+ <p>This method will be called with a <code>null</code>
+ <code>method</code> argument if an <code>IOException</code> occurred
+ when reading method information from the incoming call stream.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method to
+ return a new <A HREF="../../../net/jini/io/MarshalOutputStream.html" title="class in net.jini.io"><CODE>MarshalOutputStream</CODE></A> instance constructed with
+ the output stream obtained from the <code>request</code> as
+ specified above and an unmodifiable view of the given
+ <code>context</code> collection.
+
+ <p>A subclass can override this method to control how the marshal output
+ stream is created or implemented.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the possibly-<code>null</code> <code>Method</code>
+                instance corresponding to the interface method invoked on
+                the remote object<DD><CODE>request</CODE> - the inbound request<DD><CODE>context</CODE> - the server context
+<DT><B>Returns:</B><DD>a new marshal output stream for marshalling a call response
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>impl</code>,
+                <code>request</code>, or <code>context</code> is
+                <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkAccess(java.rmi.Remote, java.lang.reflect.Method, net.jini.core.constraint.InvocationConstraints, java.util.Collection)"><!-- --></A><H3>
+checkAccess</H3>
+<PRE>
+protected void <B>checkAccess</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                           <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                           <A HREF="../../../net/jini/core/constraint/InvocationConstraints.html" title="class in net.jini.core.constraint">InvocationConstraints</A>&nbsp;constraints,
+                           <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)</PRE>
+<DL>
+<DD>Checks that the client has permission to invoke the specified method on
+ the specified remote object.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method as
+ follows:
+
+ <p>If a permission class was specified when this invocation
+ dispatcher was constructed, <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#checkClientPermission(java.security.Permission)"><CODE>checkClientPermission</CODE></A> is called with a permission constructed from
+ the permission class. If the permission class has a constructor with
+ a <code>Method</code> parameter, the permission is constructed by
+ passing the specified method to that constructor. Otherwise the
+ permission is constructed by passing the fully qualified name of the
+ method to the constructor with a <code>String</code> parameter,
+ where the argument is formed by concatenating the name of the
+ declaring class of the specified method and the name of the method,
+ separated by ".".
+
+ <p>A subclass can override this method to implement other preinvocation
+ access control mechanisms.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the remote method<DD><CODE>constraints</CODE> - the enforced constraints for the specified
+                method, or <code>null</code><DD><CODE>context</CODE> - the server context
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/SecurityException.html" title="class or interface in java.lang">SecurityException</A></CODE> - if the current client subject does not
+                have permission to invoke the method
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the current thread is not executing an
+                incoming remote call for a remote object
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>impl</code>,
+                <code>method</code>, or <code>context</code> is
+                <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="checkClientPermission(java.security.Permission)"><!-- --></A><H3>
+checkClientPermission</H3>
+<PRE>
+public static void <B>checkClientPermission</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/Permission.html" title="class or interface in java.security">Permission</A>&nbsp;permission)</PRE>
+<DL>
+<DD>Checks that the client subject for the current remote call has the
+ specified permission. The client subject is obtained by calling <A HREF="../../../net/jini/export/ServerContext.html#getServerContextElement(java.lang.Class)"><CODE>ServerContext.getServerContextElement</CODE></A>, passing the class <A HREF="../../../net/jini/io/context/ClientSubject.html" title="interface in net.jini.io.context"><CODE>ClientSubject</CODE></A>, and then calling the <A HREF="../../../net/jini/io/context/ClientSubject.html#getClientSubject()"><CODE>getClientSubject</CODE></A> method of the returned
+ element (if any). If a security manager is installed, a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/ProtectionDomain.html" title="class or interface in java.security"><CODE>ProtectionDomain</CODE></A> is constructed with an empty <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/CodeSource.html" title="class or interface in java.security"><CODE>CodeSource</CODE></A>
+ (<code>null</code> location and certificates), <code>null</code>
+ permissions, <code>null</code> class loader, and the principals from
+ the client subject (if any), and the <code>implies</code> method of
+ that protection domain is invoked with the specified permission. If
+ <code>true</code> is returned, this method returns normally, otherwise
+ a <code>SecurityException</code> is thrown. If no security
+ manager is installed, this method returns normally.
+
+ <p>Note that the permission grant required to satisfy this check must
+ be to the client's principals alone (or a subset thereof); it cannot be
+ qualified by what code is being executed. At the point in a remote call
+ where this method is intended to be used, the useful "call stack" only
+ exists at the other end of the remote call (on the client side), and so
+ cannot meaningfully enter into the access control decision.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>permission</CODE> - the requested permission
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/SecurityException.html" title="class or interface in java.lang">SecurityException</A></CODE> - if the current client subject has not 
+                been granted the specified permission
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the current thread is not executing
+                an incoming remote method for a remote object
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>permission</code> is
+                <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmarshalMethod(java.rmi.Remote, java.io.ObjectInputStream, java.util.Collection)"><!-- --></A><H3>
+unmarshalMethod</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A> <B>unmarshalMethod</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A>&nbsp;in,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                          throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NoSuchMethodException.html" title="class or interface in java.lang">NoSuchMethodException</A>,
+                                 <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Unmarshals a method representation from the marshal input stream,
+ <code>in</code>, and returns the <code>Method</code> object
+ corresponding to that representation.  For each remote call, the
+ <code>dispatch</code> method calls this method to unmarshal the
+ method representation.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method to
+ call the <code>readLong</code> method on the marshal input stream to
+ read the method's representation encoded as a JRMP method hash
+ (defined in section 8.3 of the Java(TM) Remote Method Invocation
+ (Java RMI) specification) and return its
+ corresponding <code>Method</code> object chosen from the collection
+ of methods passed to the constructor of this invocation dispatcher.
+ If more than one method has the same hash, it is arbitrary as to
+ which one is returned.
+
+ <p>A subclass can override this method to control how the remote
+ method is unmarshalled.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>in</CODE> - the marshal input stream for the remote call<DD><CODE>context</CODE> - the server context passed to the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method for the remote call being processed
+<DT><B>Returns:</B><DD>a <code>Method</code> object corresponding to the method
+                representation
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NoSuchMethodException.html" title="class or interface in java.lang">NoSuchMethodException</A></CODE> - if the method representation does not
+                correspond to a valid method
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></CODE> - if a class could not be found during
+          unmarshalling
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if any argument is <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmarshalArguments(java.rmi.Remote, java.lang.reflect.Method, java.io.ObjectInputStream, java.util.Collection)"><!-- --></A><H3>
+unmarshalArguments</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>[] <B>unmarshalArguments</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                                      <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                                      <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html" title="class or interface in java.io">ObjectInputStream</A>&nbsp;in,
+                                      <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                               throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+                                      <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Unmarshals the arguments for the specified remote <code>method</code>
+ from the specified marshal input stream, <code>in</code>, and returns an
+ <code>Object</code> array containing the arguments read.  For each
+ remote call, the <code>dispatch</code> method calls this method to
+ unmarshal arguments.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method to
+ unmarshal each argument as follows:
+
+ <p>If the corresponding declared parameter type is primitive, then
+ the primitive value is read from the stream using the
+ corresponding <code>read</code> method for that primitive type (for
+ example, if the type is <code>int.class</code>, then the primitive
+ <code>int</code> value is read to the stream using the
+ <code>readInt</code> method) and the value is wrapped in the
+ corresponding primitive wrapper class for that type (e.g.,
+ <code>Integer</code> for <code>int</code>, etc.).  Otherwise, the
+ argument is read from the stream using the <code>readObject</code>
+ method and returned as is.
+
+ <p>A subclass can override this method to unmarshal the arguments in an
+ alternative context, perform post-processing on the arguments,
+ unmarshal additional implicit data, or otherwise control how the
+ arguments are unmarshalled. In general, the context used should mirror
+ the context in which the arguments are manipulated in the
+ implementation of the remote object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the <code>Method</code> instance corresponding
+          to the interface method invoked on the remote object<DD><CODE>in</CODE> - the incoming request stream for the remote call<DD><CODE>context</CODE> - the server context passed to the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method for the remote call being processed
+<DT><B>Returns:</B><DD>an <code>Object</code> array containing
+                the unmarshalled arguments.  If an argument's corresponding
+                declared parameter type is primitive, then its value is
+                represented with an instance of the corresponding primitive
+                wrapper class; otherwise, the value for that argument is an
+                object of a class assignable to the declared parameter type.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ClassNotFoundException.html" title="class or interface in java.lang">ClassNotFoundException</A></CODE> - if a class could not be found during
+          unmarshalling
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if any argument is <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="invoke(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object[], java.util.Collection)"><!-- --></A><H3>
+invoke</H3>
+<PRE>
+protected <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>invoke</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                        <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                        <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>[]&nbsp;args,
+                        <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                 throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></PRE>
+<DL>
+<DD>Invokes the specified <code>method</code> on the specified remote
+ object <code>impl</code>, with the specified arguments.
+ If the invocation completes normally, the return value will be
+ returned by this method.  If the invocation throws an exception,
+ this method will throw the same exception.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method as
+ follows: 
+
+ <p>If the specified method is not set accessible or is not a
+ <code>public</code> method of a <code>public</code> class an
+ <code>IllegalArgumentException</code> is thrown.
+
+ <p>If the specified method is <A HREF="../../../net/jini/security/proxytrust/ProxyTrust.html#getProxyVerifier()"><CODE>ProxyTrust.getProxyVerifier</CODE></A> and the remote object is an instance of
+ <A HREF="../../../net/jini/security/proxytrust/ServerProxyTrust.html" title="interface in net.jini.security.proxytrust"><CODE>ServerProxyTrust</CODE></A>, the <A HREF="../../../net/jini/security/proxytrust/ServerProxyTrust.html#getProxyVerifier()"><CODE>getProxyVerifier</CODE></A> method of the remote object is called and the result
+ is returned.
+ 
+ <p>Otherwise, the specified method's <code>invoke</code> method is
+ called with the specified remote object and the specified arguments,
+ and the result is returned. If <code>invoke</code> throws an <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/InvocationTargetException.html" title="class or interface in java.lang.reflect"><CODE>InvocationTargetException</CODE></A>, that exception is caught and the target
+ exception inside it is thrown to the caller. Any other exception
+ thrown during any of this computation is thrown to the caller.
+
+ <p>A subclass can override this method to invoke the method in an
+ alternative context, perform pre- or post-processing, or otherwise
+ control how the method is invoked.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the <code>Method</code> instance corresponding
+                to the interface method invoked on the remote object<DD><CODE>args</CODE> - the method arguments<DD><CODE>context</CODE> - the server context passed to the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method for the remote call being processed
+<DT><B>Returns:</B><DD>the result of the method invocation on <code>impl</code>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if any argument is <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A></CODE> - the exception thrown from the method invocation
+                on <code>impl</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="marshalReturn(java.rmi.Remote, java.lang.reflect.Method, java.lang.Object, java.io.ObjectOutputStream, java.util.Collection)"><!-- --></A><H3>
+marshalReturn</H3>
+<PRE>
+protected void <B>marshalReturn</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;returnValue,
+                             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;out,
+                             <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                      throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Marshals the specified return value for the specified remote method
+ to the marshal output stream, <code>out</code>.  After invoking
+ the method on the remote object <code>impl</code>, the
+ <code>dispatch</code> method calls this method to marshal the value
+ returned from the invocation on that remote object.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method as
+ follows: 
+
+ <p>If the declared return type of the method is void, then no return
+ value is written to the stream.  If the return type is a primitive
+ type, then the primitive value is written to the stream (for
+ example, if the type is <code>int.class</code>, then the primitive
+ <code>int</code> value is written to the stream using the
+ <code>writeInt</code> method).  Otherwise, the return value is
+ written to the stream using the <code>writeObject</code> method.
+
+ <p>A subclass can override this method to marshal the return value in an
+ alternative context, perform pre- or post-processing on the return
+ value, marshal additional implicit data, or otherwise control how the
+ return value is marshalled. In general, the context used should mirror
+ the context in which the result is computed in the implementation of
+ the remote object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the <code>Method</code> instance corresponding
+          to the interface method invoked on the remote object<DD><CODE>returnValue</CODE> - the return value to marshal to the stream<DD><CODE>out</CODE> - the marshal output stream<DD><CODE>context</CODE> - the server context passed to the <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method for the remote call being processed
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>impl</code>,
+                <code>method</code>, <code>out</code>, or
+                <code>context</code> is <code>null</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="marshalThrow(java.rmi.Remote, java.lang.reflect.Method, java.lang.Throwable, java.io.ObjectOutputStream, java.util.Collection)"><!-- --></A><H3>
+marshalThrow</H3>
+<PRE>
+protected void <B>marshalThrow</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl,
+                            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html" title="class or interface in java.lang.reflect">Method</A>&nbsp;method,
+                            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
+                            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;out,
+                            <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html" title="class or interface in java.util">Collection</A>&nbsp;context)
+                     throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Marshals the <code>throwable</code> for the specified remote method
+ to the marshal output stream, <code>out</code>.  For each method
+ invocation on <code>impl</code> that throws an exception, this
+ method is called to marshal the throwable.  This method is also
+ called if an exception occurs reading the method information from
+ the incoming call stream, as a result of calling <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#unmarshalMethod(java.rmi.Remote, java.io.ObjectInputStream, java.util.Collection)"><CODE>unmarshalMethod</CODE></A>; in this case, the
+ <code>Method</code> instance will be <code>null</code>.
+
+ <p><code>BasicInvocationDispatcher</code> implements this method to
+ marshal the throwable to the stream using the
+ <code>writeObject</code> method.
+
+ <p>A subclass can override this method to marshal the throwable in an
+ alternative context, perform pre- or post-processing on the throwable,
+ marshal additional implicit data, or otherwise control how the throwable
+ is marshalled. In general, the context used should mirror the context
+ in which the exception is generated in the implementation of the
+ remote object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - the remote object<DD><CODE>method</CODE> - the possibly-<code>null</code> <code>Method</code>
+                instance corresponding to the interface method invoked on
+                the remote object<DD><CODE>throwable</CODE> - a throwable to marshal to the stream<DD><CODE>out</CODE> - the marshal output stream<DD><CODE>context</CODE> - the server context
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if an I/O exception occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>impl</code>,
+                <code>throwable</code>, <code>out</code>, or
+                <code>context</code> is <code>null</code></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/BasicInvocationDispatcher.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../net/jini/jeri/BasicILFactory.html" title="class in net.jini.jeri"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../net/jini/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?net/jini/jeri/BasicInvocationDispatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="BasicInvocationDispatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+Copyright 2007, multiple authors.<br>Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="child" >Apache License, Version 2.0</a>, see the <a href="../../../doc-files/NOTICE" target="child" >NOTICE</a> file for attributions.
+</BODY>
+</HTML>