Update of /cvsroot/monetdb/java/src/nl/cwi/monetdb/xquery/xrpc/wrapper
In directory
sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv19545/src/nl/cwi/monetdb/xquery/xrpc/wrapper
Modified Files:
XRPCWrapper.java XRPCWrapperWorker.java
Log Message:
be more precise with the exceptions we throw, to make it easier to
dicide which ones should be reported to the calling peer, and which ones
not.
Index: XRPCWrapper.java
===================================================================
RCS file:
/cvsroot/monetdb/java/src/nl/cwi/monetdb/xquery/xrpc/wrapper/XRPCWrapper.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- XRPCWrapper.java 5 Dec 2007 17:02:01 -0000 1.1
+++ XRPCWrapper.java 6 Dec 2007 18:18:48 -0000 1.2
@@ -86,8 +86,11 @@
System.out.println("# XQuery module file \"" + WF_FILE +
"\" extracted to \"" + toFile + "\"");
}
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (OptionsException oe) {
+ oe.printStackTrace();
+ System.exit(1);
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
System.exit(1);
}
Index: XRPCWrapperWorker.java
===================================================================
RCS file:
/cvsroot/monetdb/java/src/nl/cwi/monetdb/xquery/xrpc/wrapper/XRPCWrapperWorker.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- XRPCWrapperWorker.java 5 Dec 2007 17:02:01 -0000 1.1
+++ XRPCWrapperWorker.java 6 Dec 2007 18:18:48 -0000 1.2
@@ -39,7 +39,7 @@
private boolean debug;
XRPCWrapperWorker(Socket s, CmdLineOpts o)
- throws Exception
+ throws OptionsException
{
super("XRPCWrapperWorkerThread-" + tid++);
sock = s;
@@ -62,17 +62,21 @@
private void generateQuery(String requestFilename,
String queryFilename,
String request)
- throws Exception
+ throws XRPCException
{
String infoHeader = "INFO: ("+getName()+") generateQuery(): ";
String errHeader = "ERROR: ("+getName()+") generateQuery(): ";
- soapPrefix = XRPCMessage.getNamespacePrefix(
- XRPCMessage.XRPC_MSG_TYPE_REQ, request,
- XRPCMessage.SOAP_NS);
- xrpcPrefix = XRPCMessage.getNamespacePrefix(
- XRPCMessage.XRPC_MSG_TYPE_REQ, request,
- XRPCMessage.XRPC_NS);
+ try {
+ soapPrefix = XRPCMessage.getNamespacePrefix(
+ XRPCMessage.XRPC_MSG_TYPE_REQ, request,
+ XRPCMessage.SOAP_NS);
+ xrpcPrefix = XRPCMessage.getNamespacePrefix(
+ XRPCMessage.XRPC_MSG_TYPE_REQ, request,
+ XRPCMessage.XRPC_NS);
+ } catch (XRPCException xe){
+ throw new XRPCSenderException(xe.getMessage());
+ }
NamespaceContextImpl namespaceContext = new NamespaceContextImpl();
namespaceContext.add(soapPrefix, XRPCMessage.SOAP_NS);
@@ -85,7 +89,13 @@
String xPathExpr = "/" + soapPrefix + ":Envelope/" +
soapPrefix + ":Body/" +
xrpcPrefix + ":request";
- NamedNodeMap attrs = XRPCMessage.getNodeAttributes(xPath, request,
xPathExpr);
+ NamedNodeMap attrs;
+ try{
+ attrs = XRPCMessage.getNodeAttributes(xPath, request, xPathExpr);
+ } catch (XRPCException xe){
+ throw new XRPCSenderException(xe.getMessage());
+ }
+
String xqModule =
attrs.getNamedItem(xrpcPrefix+":module").getNodeValue();
String xqMethod =
attrs.getNamedItem(xrpcPrefix+":method").getNodeValue();
String xqLocation =
attrs.getNamedItem(xrpcPrefix+":location").getNodeValue();
@@ -138,9 +148,10 @@
}
fileOut.write("))\n}" + XRPCMessage.XRPC_RESPONSE_END);
fileOut.close();
- } catch (Exception e){
+ } catch (IOException ioe){
throw new XRPCReceiverException(
- "failed to generate query for the
request.");
+ "failed to generate query for the request: " +
+ ioe.getMessage());
}
DEBUG(infoHeader + "query generated in "+queryFilename+"\n");
@@ -152,7 +163,7 @@
*/
private void execAndSend(String queryFilename,
BufferedWriter sockOut)
- throws Exception
+ throws XRPCReceiverException
{
String infoHeader = "INFO: ("+getName()+") execAndSend(): ";
String errHeader = "ERROR: ("+getName()+") execAndSend(): ";
@@ -169,10 +180,10 @@
throw new XRPCReceiverException("This should not
happen: " +
"XRPC wrapper does not know how to
execute the " +
"XQuery engine: " + oe.getMessage());
- } catch (Exception e){
+ } catch (IOException ioe){
throw new XRPCReceiverException(
"Failed to start executing command \"" +
- command + "\":" + e.getMessage());
+ command + "\":" + ioe.getMessage());
}
BufferedReader procIn = new BufferedReader(new
@@ -189,50 +200,68 @@
}
if (c >= 0){
- DEBUG(infoHeader + "query execution seems succeeded: " +
- "got output from the process'
InputStream.\n");
- DEBUG(infoHeader + "sending XRPC response message:\n");
+ try{
+ DEBUG(infoHeader + "query execution seems succeeded: " +
+ "got output from the process' InputStream.\n");
+ DEBUG(infoHeader + "sending XRPC response message:\n");
- sockOut.write(XRPCHTTPConnection.HTTP_OK_HEADER);
- DEBUG(XRPCHTTPConnection.HTTP_OK_HEADER);
+ sockOut.write(XRPCHTTPConnection.HTTP_OK_HEADER);
+ DEBUG(XRPCHTTPConnection.HTTP_OK_HEADER);
- /* Add the XML declaration, if necessary */
- char[] cbuf = new char[4];
- procIn.read(cbuf, 0, 4);
+ /* Add the XML declaration, if necessary */
+ char[] cbuf = new char[4];
+ procIn.read(cbuf, 0, 4);
- if((char)c != '<' || cbuf[0] != '?' || cbuf[1] != 'x' || cbuf[2]
!= 'm' || cbuf[3] != 'l') {
- sockOut.write(XRPCMessage.XML_DECL);
- DEBUG(XRPCMessage.XML_DECL);
- }
+ if((char)c != '<' || cbuf[0] != '?' || cbuf[1] != 'x' ||
cbuf[2] != 'm' || cbuf[3] != 'l') {
+ sockOut.write(XRPCMessage.XML_DECL);
+ DEBUG(XRPCMessage.XML_DECL);
+ }
- sockOut.write(new Character((char)c).toString());
- sockOut.write(cbuf, 0, 4);
- DEBUG(new Character((char)c).toString());
- DEBUG("" + cbuf[0] + cbuf[1] + cbuf[2] + cbuf[3]);
+ sockOut.write(new Character((char)c).toString());
+ sockOut.write(cbuf, 0, 4);
+ DEBUG(new Character((char)c).toString());
+ DEBUG("" + cbuf[0] + cbuf[1] + cbuf[2] + cbuf[3]);
- while ((c = procIn.read()) >= 0) {
- sockOut.write(new
Character((char)c).toString());
- DEBUG(new Character((char)c).toString());
- }
- } else { /* send SOAP Fault message */
- StringBuffer faultReason = new StringBuffer(8192);
- BufferedReader errIn = new BufferedReader(new
- InputStreamReader(proc.getErrorStream()));
- while ((c = errIn.read()) >= 0) {
- faultReason.append(new Character((char)c).toString());
+ while ((c = procIn.read()) >= 0) {
+ sockOut.write(new Character((char)c).toString());
+ DEBUG(new Character((char)c).toString());
+ }
+ } catch (IOException ioe){
+ throw new XRPCReceiverException(
+ "Error occurred while reading query results: " +
+ ioe.getMessage());
}
- errIn.close();
+ } else { /* send SOAP Fault message */
+ try {
+ StringBuffer faultReason = new StringBuffer(8192);
+ BufferedReader errIn = new BufferedReader(new
+ InputStreamReader(proc.getErrorStream()));
+ while ((c = errIn.read()) >= 0) {
+ faultReason.append(new Character((char)c).toString());
+ }
+ errIn.close();
- String faultMsg =
- XRPCMessage.SOAP_FAULT(soapPrefix+":Receiver",
- faultReason.toString());
- DEBUG(XRPCHTTPConnection.HTTP_ERR_500_HEADER + faultMsg);
- XRPCHTTPConnection.send(sockOut,
- XRPCHTTPConnection.HTTP_ERR_500_HEADER, faultMsg);
+ String faultMsg =
+ XRPCMessage.SOAP_FAULT(soapPrefix+":Receiver",
+ faultReason.toString());
+ DEBUG(XRPCHTTPConnection.HTTP_ERR_500_HEADER + faultMsg);
+ XRPCHTTPConnection.send(sockOut,
+ XRPCHTTPConnection.HTTP_ERR_500_HEADER, faultMsg);
+ } catch (IOException ioe){
+ System.err.println(errHeader + "caught exception:");
+ ioe.printStackTrace();
+ System.exit(1);
+ }
}
- int ret = proc.waitFor();
- DEBUG(infoHeader + "query execution exits with: " + ret + "\n");
+ try{
+ int ret = proc.waitFor();
+ DEBUG(infoHeader + "query execution exits with: " + ret + "\n");
+ } catch (InterruptedException ie){
+ System.err.println(errHeader + "caught exception:");
+ ie.printStackTrace();
+ System.exit(1);
+ }
}
/**
@@ -244,7 +273,7 @@
* results back
*/
private void handleXRPCReq(String request, BufferedWriter sockOut)
- throws Exception
+ throws XRPCException
{
String infoHeader = "INFO: ("+getName()+") handleXRPCReq(): ";
String warnHeader = "WARNING: ("+getName()+") handleXRPCReq():
";
@@ -252,44 +281,54 @@
String requestFilename =
rootdir+"xrpc_request_"+getName()+".xml";
String queryFilename =
rootdir+"xrpc_wrapper_query_"+getName()+".xq";
- BufferedWriter fileOut = new BufferedWriter(new
FileWriter(requestFilename, false));
- fileOut.write(request.toString());
- fileOut.close();
- DEBUG(infoHeader +
- "request (" + request.length() + " bytes) stored in: " +
- requestFilename + "\n");
+ try {
+ BufferedWriter fileOut = new BufferedWriter(new
FileWriter(requestFilename, false));
+ fileOut.write(request.toString());
+ fileOut.close();
+ DEBUG(infoHeader + "request (" + request.length() +
+ " bytes) stored in: " + requestFilename + "\n");
+ } catch (IOException ioe){
+ throw new XRPCReceiverException(
+ "Failed to store request message: " +
+ ioe.getMessage());
+ }
generateQuery(requestFilename, queryFilename, request);
execAndSend(queryFilename, sockOut);
DEBUG(infoHeader + "DONE: " + sock + "\n\n");
- if(opts.getOption("remove").isPresent()){
- try {
- File fQ = new File(queryFilename);
- File fR = new File(requestFilename);
+ try{
+ if(opts.getOption("remove").isPresent()){
+ try {
+ File fQ = new File(queryFilename);
+ File fR = new File(requestFilename);
- String arg = opts.getOption("remove").getArgument();
- if(arg.equals("request")) {
- fQ.delete();
- DEBUG(infoHeader + "request file \"" +
- requestFilename + "\" deleted\n");
- } else if(arg.equals("query")) {
- fR.delete();
- DEBUG(infoHeader + "query file \"" +
- queryFilename + "\" deleted\n");
- } else if(arg.equals("all")) {
- fQ.delete();
- fR.delete();
- DEBUG(infoHeader + "query file \"" +
- queryFilename + "\" deleted\n");
- DEBUG(infoHeader + "request file \"" +
- requestFilename + "\" deleted\n");
+ String arg = opts.getOption("remove").getArgument();
+ if(arg.equals("request")) {
+ fQ.delete();
+ DEBUG(infoHeader + "request file \"" +
+ requestFilename + "\" deleted\n");
+ } else if(arg.equals("query")) {
+ fR.delete();
+ DEBUG(infoHeader + "query file \"" +
+ queryFilename + "\" deleted\n");
+ } else if(arg.equals("all")) {
+ fQ.delete();
+ fR.delete();
+ DEBUG(infoHeader + "query file \"" +
+ queryFilename + "\" deleted\n");
+ DEBUG(infoHeader + "request file \"" +
+ requestFilename + "\" deleted\n");
+ }
+ } catch (Exception e) {
+ System.out.println(warnHeader +
+ "failed to delete temporary file(s):");
+ e.printStackTrace();
}
- } catch (Exception e) {
- System.out.println(warnHeader +
- "failed to delete temporary file(s):");
- e.printStackTrace();
}
+ } catch (OptionsException oe){
+ System.out.println(warnHeader +
+ "caught OptionsException: " + oe.getMessage());
}
}
@@ -302,48 +341,54 @@
BufferedWriter sockOut = null;
try{
+ sockIn = new BufferedReader(new
+ InputStreamReader(sock.getInputStream()));
+ sockOut = new BufferedWriter(new
+ OutputStreamWriter(sock.getOutputStream()));
+
+ String reqMsg = XRPCHTTPConnection.receive(sockIn,
XRPCWrapper.XRPCD_CALLBACK);
+ handleXRPCReq(reqMsg, sockOut);
+ } catch (XRPCException xe){
+ String faultMsg = "", httpHeader = "";
+
try{
- sockIn = new BufferedReader(new
- InputStreamReader(sock.getInputStream()));
- sockOut = new BufferedWriter(new
- OutputStreamWriter(sock.getOutputStream()));
+ if (xe instanceof XRPCSenderException) {
+ faultMsg = XRPCMessage.SOAP_FAULT(soapPrefix+":Sender",
xe.getMessage());
+ httpHeader = XRPCHTTPConnection.HTTP_ERR_404_HEADER;
+ } else if (xe instanceof XRPCReceiverException) {
+ faultMsg = XRPCMessage.SOAP_FAULT(soapPrefix+":Receiver",
xe.getMessage());
+ httpHeader = XRPCHTTPConnection.HTTP_ERR_500_HEADER;
+ } else {
+ System.err.println(errHeader + "caught exception:");
+ xe.printStackTrace();
+ sockOut.close();
+ sockIn.close();
+ sock.close();
+ System.exit(1);
+ }
- String reqMsg = XRPCHTTPConnection.receive(sockIn,
XRPCWrapper.XRPCD_CALLBACK);
- handleXRPCReq(reqMsg, sockOut);
- } catch (XRPCSenderException se) {
- String faultMsg =
- XRPCMessage.SOAP_FAULT(soapPrefix+":Sender",
- se.getMessage());
- XRPCHTTPConnection.send(sockOut,
- XRPCHTTPConnection.HTTP_ERR_404_HEADER, faultMsg);
+ XRPCHTTPConnection.send(sockOut, httpHeader, faultMsg);
System.err.println(errHeader + "caught exception:");
- se.printStackTrace();
+ xe.printStackTrace();
System.err.println(errHeader + "sent SOAP Fault message:");
- DEBUG(XRPCHTTPConnection.HTTP_ERR_404_HEADER + faultMsg);
- } catch (XRPCReceiverException re) {
- String faultMsg =
- XRPCMessage.SOAP_FAULT(soapPrefix+":Receiver",
- re.getMessage());
- XRPCHTTPConnection.send(sockOut,
- XRPCHTTPConnection.HTTP_ERR_500_HEADER, faultMsg);
+ DEBUG(httpHeader + faultMsg);
+ } catch (IOException ioe){
System.err.println(errHeader + "caught exception:");
- re.printStackTrace();
- System.err.println(errHeader + "sent SOAP Fault message:");
- DEBUG(XRPCHTTPConnection.HTTP_ERR_500_HEADER + faultMsg);
+ ioe.printStackTrace();
}
- } catch (Exception e1){
- System.err.println(errHeader + "caught exception:");
- e1.printStackTrace();
- } finally {
- try{
- sockOut.close();
- sockIn.close();
- sock.close();
- } catch (Exception e2) {
- System.err.println(warnHeader +
- "caught exception in FINAL
block:");
- e2.printStackTrace();
- }
- }
- }
+ } catch (IOException ioe){
+ System.err.println(errHeader + "caught exception:");
+ ioe.printStackTrace();
+ } finally {
+ try{
+ sockOut.close();
+ sockIn.close();
+ sock.close();
+ } catch (IOException ioe) {
+ System.err.println(warnHeader +
+ "caught exception in FINAL block:");
+ ioe.printStackTrace();
+ }
+ }
+ }
}
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins