This is the client code which runs as a stand-alone application. It expects
an input file name as well as a four digit code on the command line. This
code demonstrates my personal coding approach; I include a static void main
routine in order to facilitate debugging. The main routine creates an
instance of the class and passes the appropriate arguments to the methods.
The existence of the main method generally doesn't cause any conflicts once
the class is included in a jar file.
Note how simple and elegant the client can be! I've implemented solutions
which function as servlets and call other servlets on the same or other
servers. Open an HttpURLConnection to the other machine and you obtain
convenient location independence. This code even handles those situations
where a non-standard (200) response is received from the webserver.
Note that we make two calls to getResponseCode, the first one contained
in a try block. An exception will be thrown to the top level if the
first attempt isn't prepared to catch it. The second call is only
executed if the first one fails. In either case, we process the response
appropriately.
import java.io.*;
import java.net.*;
import java.util.*;
public class DB2XMLSendDoc {
int rc;
String response;
public static void main( String args[] ) {
Reader rdr = null;
int fourDigit = -1;
DB2XMLSendDoc app = null;
if( args.length != 2 ) {
System.err.println( "Usage: DB2XMLSendDoc filename " +
"fourdigit" );
System.exit( 12 );
}
try {
rdr = new FileReader( args[0] );
}
catch( IOException e ) {
System.err.println( "DB2XMLSendDoc: " + args[0] +
": " + e.toString() );
System.exit( 12 );
}
try {
fourDigit = Integer.parseInt( args[1] );
}
catch( NumberFormatException e ) {
System.err.println( "DB2XMLSendDoc: " + args[1] +
": fourdigit must be numeric" );
System.exit( 12 );
}
app = new DB2XMLSendDoc( rdr, fourDigit );
System.out.println( "rc = " + app.getReturnCode() );
System.out.println( "response = '" + app.getResponse() + "'" );
}
public DB2XMLSendDoc( Reader in, int fourDigit ) {
URL url = null;
HttpURLConnection conn = null;
BufferedReader br = null;
PrintWriter pw = null;
String lineIn = null;
StringBuffer sb = new StringBuffer();
try {
br = new BufferedReader( in );
url = new URL( "http://localhost/servlet/DB2XMLProvServlet"
+ "?fourdigit=" + fourDigit );
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
pw = new PrintWriter( new OutputStreamWriter(
conn.getOutputStream() ) );
while( ( lineIn = br.readLine() ) != null )
pw.println( lineIn );
pw.flush();
pw.close();
br.close();
try {
rc = conn.getResponseCode();
}
catch( Exception e ) {
}
if( rc < 0 )
rc = conn.getResponseCode();
if( rc == 200 ) {
br = new BufferedReader( new InputStreamReader(
conn.getInputStream() ) );
while( ( lineIn = br.readLine() ) != null )
sb.append( lineIn + "\n" );
br.close();
}
else {
sb.append( conn.getResponseMessage() );
}
if( sb.toString().length() > 0 )
response = sb.toString();
}
catch( Exception e ) {
rc = -1;
response = e.toString();
}
}
public int getReturnCode() {
return( rc );
}
public String getResponse() {
return( response );
}
}
Copyright © 2001 by Phil Selby
All rights reserved internationally.