<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RMI, RESULTSET, JDBC</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2 FACE="Arial">Hi,</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">I am using JDBC and RMI. I am getting the following error when trying to pass a ResultSet object via RMI.</FONT>
<BR><FONT SIZE=2 FACE="Arial">---</FONT>
<BR><FONT SIZE=2 FACE="Arial">DataMan exception: error unmarshalling return; nested exception is: java.io.WriteAbortedException: writing aborted; java.io.NotSerializable exception: sun.jdbc.odbc.JdbcOdbcResultSet</FONT></P>

<P><FONT SIZE=2 FACE="Arial">---</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">How can I make java.sql.ResultSet Serializable (w/o effecting the data) ? Can I pass a ResultSet through a network? Is a cast to Object neccessary?</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Thanks,</FONT>
<BR><FONT SIZE=2 FACE="Arial">Christian Velez</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">Related Code</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">RMI SERVER</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">package expandTag;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">import java.rmi.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.Naming;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.RemoteException;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.server.UnicastRemoteObject;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.net.SocketPermission;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">public class DataManServer {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">public static void main(String [] args) throws Exception {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">if (System.getSecurityManager() == null) {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">System.setSecurityManager(new RMISecurityManager());</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">}</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">try {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">DataManImpl dm = new DataManImpl();</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">System.out.print(&quot;Expand Tag Data Manager starting ...&quot;);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">Naming.rebind(DataMan.LOOKUPNAME, dm);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">System.out.print(&quot;ready.&quot;);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; </FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; } catch (Exception e) {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.err.println(e);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.exit(1);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; } </FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">}</FONT>
<BR><FONT SIZE=2 FACE="Arial">}</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">Related Code</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">RMI INTERFACE</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">package expandTag;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">import java.util.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.*;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">public interface DataMan extends java.rmi.Remote { </FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; // The object returned is a java.sql.ResultSet</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; Object getETData(String dbname) throws RemoteException;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; public final static String LOOKUPNAME = </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;rmi://198.80.58.19:1099/DataMan&quot;;</FONT>
<BR><FONT SIZE=2 FACE="Arial">}</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">Related Code</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">RMI IMPLEMENTAITON</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">package expandTag;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">import java.sql.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.rmi.server.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.sql.*;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">public class DataManImpl extends UnicastRemoteObject </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; implements DataMan {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">public DataManImpl() throws RemoteException {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">super();</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; // The object returned is a java.sql.ResultSet</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; public Object getETData(String dbname) throws RemoteException {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object spec;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dbURL = &quot;jdbc:odbc:ETdatabase&quot;;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class c = Class.forName(&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DriverManager.getConnection(dbURL, &quot;dbo&quot;, &quot;&quot;);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String query = &quot;sp_getETData &quot; + dbname;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement stmt = conn.createStatement();</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spec = (Object)stmt.executeQuery(query);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return spec; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ClassNotFoundException ex) {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Driver Manager error&quot;);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (SQLException ex) {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(ex);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; }</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">}</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">Related Code</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">RMI CLIENT</FONT>
<BR><FONT SIZE=2 FACE="Arial">----------------------------</FONT>
<BR><FONT SIZE=2 FACE="Arial">package expandTag;</FONT>
<BR><FONT SIZE=2 FACE="Arial">/* Command Line : </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; java -Djava.security.policy={policy file} expandTag.ExpandTagDataStore {dbname}</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; The client requires:</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp; DataMan.class</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp; DataManImpl_Stub.class</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp; The server requires:</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataManImpl_Skel.class</FONT>
<BR><FONT SIZE=2 FACE="Arial">*/</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">&nbsp; </FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">import java.rmi.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.sql.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.io.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.lang.*;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.io.IOException;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.io.PrintWriter;</FONT>
<BR><FONT SIZE=2 FACE="Arial">import java.io.FileWriter;</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">public class ExpandTagDataStore {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; static protected&nbsp; DataMan dmConnection = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; static private&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean flushtext = true;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; static private&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dir = &quot;c:/&quot;; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; static private&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter ETFile;&nbsp;&nbsp;&nbsp; </FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">static private&nbsp; String dbname;</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">static private&nbsp; ResultSet spec;</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">public static void main(String args[]) {</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">//Required for network implementation</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(new RMISecurityManager());</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">System.out.println(&quot;Starting ETTextApp...&quot;);</FONT>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Arial">dbname = args[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dmConnection = (DataMan)Naming.lookup(DataMan.LOOKUPNAME);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spec = (ResultSet)dmConnection.getETData(dbname);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; System.out.println(&quot;DataMan exception: &quot; + e.getMessage());</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; </FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //writeXMLFile(ETSpec);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2 FACE="Arial">...</FONT>
<BR><FONT SIZE=2 FACE="Arial">}</FONT>
</P>

</BODY>
</HTML>