diff --git a/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java b/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java index ba185001f68e5ba280da34dfbc3563f07dc290fd..47b333cf9ca4a84be68216e46b5ca15efcfed98e 100644 --- a/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java +++ b/src/fr/inrialpes/exmo/align/service/HTMLAServProfile.java @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (C) INRIA Rhône-Alpes, 2006-2007. + * Copyright (C) INRIA Rh?e-Alpes, 2006-2007. * Copyright (C) 2001,2005,2006 Jarno Elonen (elonen@iki.fi, http://iki.fi/elonen/) * * This code is based on NanoHTTPD from Jarno Elonen @@ -52,6 +52,7 @@ import org.semanticweb.owl.align.Alignment; import org.semanticweb.owl.align.Parameters; import java.io.File; +import java.io.FileReader; import java.io.IOException; import java.io.FileInputStream; import java.io.PrintWriter; @@ -114,6 +115,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile { public static final String MIME_PLAINTEXT = "text/plain", MIME_HTML = "text/html", + MIME_XML = "text/xml", MIME_DEFAULT_BINARY = "application/octet-stream"; public static final int MAX_FILE_SIZE = 10000; @@ -146,6 +148,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile { if ( params.getParameter( "wsdl" ) != null ){ wsmanager = new WSAServProfile(); } + if(wsmanager != null) wsmanager.init(params, manager); myId = "LocalHTMLInterface"; serverId = "dummy"; localId = 0; @@ -216,7 +219,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile { start = uri.length(); } if ( oper.equals( "aserv" ) ){ - if ( wsmanager != null ) { + if ( wsmanager != null ) { return new Response( HTTP_OK, MIME_HTML, wsmanager.protocolAnswer( uri, uri.substring(start), header, params ) ); } else { // This is not correct: I shoud return an error @@ -226,6 +229,8 @@ public class HTMLAServProfile implements AlignmentServiceProfile { return adminAnswer( uri, uri.substring(start), header, params ); } else if ( oper.equals( "html" ) ){ return htmlAnswer( uri, uri.substring(start), header, params ); + } else if ( oper.equals( "wsdl" ) ){ + return wsdlAnswer(uri, uri.substring(start), header, params); } else { //return serveFile( uri, header, new File("."), true ); return new Response( HTTP_OK, MIME_HTML, "<html><head></head><body>"+about()+"</body></html>" ); @@ -254,23 +259,25 @@ public class HTMLAServProfile implements AlignmentServiceProfile { } msg += "</ul>"; } else if ( perf.equals("listmethods") ){ - msg = "<h1>Embedded classes</h1>\n<h2>Methods</h2><ul compact=\"1\">"; + msg = "<h1>Available methods</h1><ul compact=\"1\">"; for( Iterator it = manager.listmethods().iterator(); it.hasNext(); ) { msg += "<li>"+it.next()+"</li>"; } msg += "</ul>"; - msg += "<h2>Renderers</h2><ul compact=\"1\">"; + } else if ( perf.equals("listrenderers") ) { + msg = "<h1>Available renderers</h1><ul compact=\"1\">"; for( Iterator it = manager.listrenderers().iterator(); it.hasNext(); ) { msg += "<li>"+it.next()+"</li>"; } msg += "</ul>"; - msg += "<h2>Services</h2><ul compact=\"1\">"; + } else if ( perf.equals("listservices") ) { + msg = "<h1>Available services</h1><ul compact=\"1\">"; for( Iterator it = manager.listservices().iterator(); it.hasNext(); ) { msg += "<li>"+it.next()+"</li>"; } msg += "</ul>"; } else if ( perf.equals("prmsqlquery") ){ - msg = "<h1>SQL query</h1><form action=\"sqlquery\">Query:<br /><textarea name=\"query\" rows=\"20\" cols=\"80\">SELECT \nFROM \nWHERE </textarea> (sql)<br /><small>An SQL SELECT query</small><br /><input type=\"submit\" value=\"Query\"/></form>"; + msg = "<h1>SQL query</h1><form action=\"sqlquery\">Query: <input type=\"textarea\" name=\"query\" rows=\"8\"size=\"60\"/> (sql)<br /><small>An SQL SELECT query</small><br /><input type=\"submit\" value=\"Query\"/></form>"; } else if ( perf.equals("sqlquery") ){ String answer = manager.query( (String)params.getParameter("query") ); msg = "<pre>"+answer+"</pre>"; @@ -294,7 +301,9 @@ public class HTMLAServProfile implements AlignmentServiceProfile { } else if ( perf.equals("") ) { msg = "<h1>Alignment server administration</h1><ul compact=\"1\">"; msg += "<li><form action=\"listalignments\"><input type=\"submit\" value=\"Available alignments\"/></form></li>"; - msg += "<li><form action=\"listmethods\"><input type=\"submit\" value=\"Embedded classes\"/></form></li>"; + msg += "<li><form action=\"listmethods\"><input type=\"submit\" value=\"Available methods\"/></form></li>"; + msg += "<li><form action=\"listrenderers\"><input type=\"submit\" value=\"Available renderers\"/></form></li>"; + msg += "<li><form action=\"listservices\"><input type=\"submit\" value=\"Available services\"/></form></li>"; msg += "<li><form action=\"prmsqlquery\"><input type=\"submit\" value=\"SQL Query\"/></form></li>"; msg += "<li><form action=\"prmflush\"><input type=\"submit\" value=\"Flush caches\"/></form></li>"; msg += "<li><form action=\"prmreset\"><input type=\"submit\" value=\"Reset server\"/></form></li>"; @@ -331,15 +340,15 @@ public class HTMLAServProfile implements AlignmentServiceProfile { } else if ( perf.equals("store") ) { // here should be done the switch between store and load/store String id = (String)params.getParameter("id"); - //String url = (String)params.getParameter("url"); - //if ( url != null && !url.equals("") ) { // Load the URL - //Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) ); - //if ( answer instanceof ErrorMsg ) { - // msg = testErrorMessages( answer ); - //} else { - // id = answer.getContent(); - //} - //} + String url = (String)params.getParameter("url"); + if ( url != null && !url.equals("") ) { // Load the URL + Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessages( answer ); + } else { + id = answer.getContent(); + } + } if ( id != null ){ // Store it Message answer = manager.store( new Message(newId(),(Message)null,myId,serverId,id, params) ); if ( answer instanceof ErrorMsg ) { @@ -347,6 +356,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile { } else { msg = "<h1>Alignment stored</h1>"; msg += displayAnswer( answer ); + System.out.println("msg ==== " + msg); } } } else if ( perf.equals("prmcut") ) { @@ -426,26 +436,6 @@ public class HTMLAServProfile implements AlignmentServiceProfile { return new Response( HTTP_OK, MIME_HTML, answer.getContent() ); } // Metadata not done yet - } else if ( perf.equals("prmtranslate") ) { - msg = "<h1>Translate query</h1><form action=\"translate\">"; - msg += "Alignment id: <select name=\"id\">"; - for( Enumeration e = manager.alignments(); e.hasMoreElements(); ){ - String id = ((Alignment)e.nextElement()).getExtension("id"); - msg += "<option value=\""+id+"\">"+id+"</option>"; - } - msg += "</select><br />"; - msg += "SPARQL query:<br /> <textarea name=\"query\" rows=\"20\" cols=\"80\">PREFIX foaf: <http://xmlns.com/foaf/0.1/>\nSELECT *\nFROM <>\nWHERE {\n\n}</textarea> (SPARQL)<br /><small>A SPARQL query (PREFIX prefix: <uri> SELECT variables FROM <url> WHERE { triples })</small><br /><input type=\"submit\" value=\"Translate\"/></form>"; - } else if ( perf.equals("translate") ) { - Message answer = manager.translate( new Message(newId(),(Message)null,myId,serverId,"", params) ); - if ( answer instanceof ErrorMsg ) { - msg = testErrorMessages( answer ); - } else { - msg = "<h1>Message translation</h1>"; - msg += "<h2>Initial message</h2><pre>"+((String)params.getParameter("query")).replaceAll("&", "&").replaceAll("<", "<")+"</pre>"; - msg += "<h2>Translated message</h2><pre>"; - msg += answer.HTMLString().replaceAll("&", "&").replaceAll("<", "<"); - msg += "</pre>"; - } } else if ( perf.equals("prmmetadata") ) { msg = "<h1>Retrieve alignment metadata</h1><form action=\"metadata\">"; msg += "Alignment id: <select name=\"id\">"; @@ -473,7 +463,7 @@ public class HTMLAServProfile implements AlignmentServiceProfile { msg += "Alignment file: <form enctype=\"multipart/form-data\" action=\"loadfile\" method=\"POST\">"; msg += " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\""+MAX_FILE_SIZE+"\"/>"; msg += "<input name=\"content\" type=\"file\" size=\"35\">"; - msg += "<br /><small>NOTE: Max file size is "+(MAX_FILE_SIZE/1024)+"KB</small><br />"; + msg += "<br /><small>NOTE: Max file size is"+(MAX_FILE_SIZE/1024)+"KB</small><br />"; msg += " <input type=\"submit\" Value=\"Upload\">"; msg += " </form>"; } else if ( perf.equals("load") ) { @@ -494,15 +484,17 @@ public class HTMLAServProfile implements AlignmentServiceProfile { msg = "<h1>Alignment loaded</h1>"; msg += displayAnswer( answer ); } + } else if ( perf.equals("prmtranslate") ) { + } else if ( perf.equals("translate") ) { + // translate( mess ) } else if ( perf.equals("") ) { - msg = "<h1>Alignment Server commands</h1><ul compact=\"1\">"; + msg = "<h1>Available commands</h1><ul compact=\"1\">"; msg += "<li><form action=\"prmfind\"><input type=\"submit\" value=\"Find an alignment for ontologies\"/></form></li>"; msg += "<li><form action=\"prmalign\"><input type=\"submit\" value=\"Match ontologies\"/></form></li>"; msg += "<li><form action=\"prmcut\"><input type=\"submit\" value=\"Trim an alignment above some threshold\"/></form></li>"; msg += "<li><form action=\"prmload\"><input type=\"submit\" value=\"Load alignments\"/></form></li>"; msg += "<li><form action=\"prmstore\"><input type=\"submit\" value=\"Store an alignment in the server\"/></form></li>"; - msg += "<li><form action=\"prmretrieve\"><input type=\"submit\" value=\"Retrieve an alignment from id\"/></form></li>"; - msg += "<li><form action=\"prmtranslate\"><input type=\"submit\" value=\"Translate a query\"/></form></li>"; + msg += "<li><form action=\"prmretrieve\"><input type=\"submit\" value=\"Retrieve an alignment from its id\"/></form></li>"; msg += "<li><form action=\"../admin/\"><input type=\"submit\" value=\"Server management\"/></form></li>"; msg += "</ul>"; } else { @@ -514,6 +506,28 @@ public class HTMLAServProfile implements AlignmentServiceProfile { // =============================================== // Util + public Response wsdlAnswer(String uri, String perf, Properties header, Parameters params ) { + String msg = ""; + try + { + FileReader fr = null; + String temp; + fr = new FileReader ("WSAlignSVC.wsdl"); + BufferedReader inFile = new BufferedReader( fr ); + while ((temp = inFile.readLine()) != null) { + //msg = msg + line + "\n"; + msg =msg + temp; + } + if (fr != null) fr.close(); + } + catch (IOException e) + { + System.err.println(e.toString()); + } + return new Response( HTTP_OK, MIME_XML, msg ); + } + + private String testErrorMessages( Message answer ) { return "<h1>Alignment error</h1>"+answer.HTMLString(); } @@ -1026,6 +1040,5 @@ public class HTMLAServProfile implements AlignmentServiceProfile { */ public Properties header = new Properties(); } - } diff --git a/src/fr/inrialpes/exmo/align/service/Message.java b/src/fr/inrialpes/exmo/align/service/Message.java index 231a0c50f7c8f81bf7cddb7b405198696c026f18..6b45049f24fc745efa8dc38fb5d666aad4c05a43 100644 --- a/src/fr/inrialpes/exmo/align/service/Message.java +++ b/src/fr/inrialpes/exmo/align/service/Message.java @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (C) INRIA Rhône-Alpes, 2006-2007 + * Copyright (C) INRIA Rh?e-Alpes, 2006-2007 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -48,6 +48,10 @@ public class Message { return "<h1>Message</h1><dl><dt>id:</dt><dd>"+surrogate+"</dd><dt>sender:</dt><dd>"+sender+"</dd><dt>receiver:</dt><dd>"+receiver+"</dd><dt>in-reply-to:</dt><dd>"+inReplyTo+"</dd><dt>content:</dt><dd>"+content+"</dd></dl>"; } + public String SOAPString(){ + return "<id>"+surrogate+"</id>"+"<sender>"+sender+"</sender>" + "<receiver>"+receiver+"</receiver>" + "<in-reply-to>" + inReplyTo+ "</in-reply-to>" + "<content>" + content + "</content>"; + } + public int getId () { return surrogate; } diff --git a/src/fr/inrialpes/exmo/align/service/OntologyURI.java b/src/fr/inrialpes/exmo/align/service/OntologyURI.java index b537c2ee05850ed719ddad72829a6a85d67bfb0c..1b20c27496d4f3980ccbb0fc75dd9018aa3c3093 100644 --- a/src/fr/inrialpes/exmo/align/service/OntologyURI.java +++ b/src/fr/inrialpes/exmo/align/service/OntologyURI.java @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (C) INRIA Rhône-Alpes, 2006-2007 + * Copyright (C) INRIA Rh?e-Alpes, 2006-2007 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -34,4 +34,8 @@ public class OntologyURI extends Success { public String HTMLString(){ return "Ontology URI: "+content; } + public String SOAPString(){ + return "<uri>"+content+"</uri>"; + } + } diff --git a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java index 510d98948dc819377b125d739dd1246cdd3d4edc..9360a51560e45437f771fa5f90226c309f93cfa8 100644 --- a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java +++ b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (C) INRIA Rhône-Alpes, 2007. + * Copyright (C) INRIA Rh?e-Alpes, 2007. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -20,9 +20,12 @@ package fr.inrialpes.exmo.align.service; -/*import org.semanticweb.owl.align.Alignment; +import fr.inrialpes.exmo.align.impl.BasicParameters; + +import org.semanticweb.owl.align.Alignment; import org.semanticweb.owl.align.Parameters; +import java.io.File; import java.io.IOException; import java.io.FileInputStream; import java.io.PrintWriter; @@ -36,6 +39,7 @@ import java.util.StringTokenizer; import java.util.Locale; import java.util.TimeZone; import java.util.Hashtable; +import java.util.Properties; import java.util.Date; import java.util.Enumeration; import java.util.Iterator; @@ -46,25 +50,6 @@ import java.net.URLEncoder; import java.net.URLDecoder; import java.lang.Integer; -*/ - -import java.io.File; -import java.util.Properties; - -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Element; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.DocumentBuilder; - -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -import org.semanticweb.owl.align.Parameters; - -import fr.inrialpes.exmo.align.impl.BasicParameters; /** * HTMLAServProfile: an HTML provile for the Alignment server @@ -111,7 +96,10 @@ public class WSAServProfile implements AlignmentServiceProfile { public void init( Parameters params, AServProtocolManager manager ) throws AServException { this.manager = manager; // This may register the WSDL file to some directory - } + myId = "LocalHTMLInterface"; + serverId = "dummy"; + localId = 0; + } public void close(){ // This may unregister the WSDL file to some directory @@ -128,70 +116,251 @@ public class WSAServProfile implements AlignmentServiceProfile { * Not implemented yet * but reserved if appears useful */ - public String protocolAnswer( String uri, String perf, Properties header, Parameters params ) { - // The posted SOAP message is in the "content" parameter - System.err.println("SOAP MESSAGE [ "+perf+" ]\n"+params.getParameter("content")); + public String protocolAnswer( String uri, String perf, Properties header, Parameters param ) { + String method; + String message; +// System.err.println("SOAP MESSAGE [ "+perf+" ]\n"+params.getParameter("content")); + method = header.getProperty("SOAPAction"); + message = (String) param.getParameter("content"); + String msg = "<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance' xmlns:xsd='http://www.w3.org/1999/XMLSchema'> <SOAP-ENV:Body>"; - Parameters p = params; - if ( params.getParameter("content") != null ) - p = read( (String)params.getParameter("content"), params ); - if ( perf.equals("WSDL") ) { // -> WSDL - } else if ( perf.equals("listalignment") ) { // -> List of URI - } else if ( perf.equals("listmethods") ) { // -> List of String - } else if ( perf.equals("listrenderers") ) { // -> List of String - } else if ( perf.equals("listservices") ) { // -> List of String - } else if ( perf.equals("store") ) { // URI -> URI - } else if ( perf.equals("cut") ) { // URI * string * float -> URI - } else if ( perf.equals("align") ) { // URL * URL * URI * String * boolean * (params) -> URI - } else if ( perf.equals("find") ) { // URI * URI -> List of URI - } else if ( perf.equals("retrieve") ) { // URI -> XML - } else if ( perf.equals("metadata") ) { // URI -> XML - } else if ( perf.equals("load") ) { // URL -> URI - } else if ( perf.equals("loadfile") ) { // XML -> URI - } else if ( perf.equals("translate") ) { // XML * URI -> XML + if ( perf.equals("WSDL") ) { + } else if ( method.equals("listalignment") ) { + for( Enumeration e = manager.alignments(); e.hasMoreElements(); ){ + String id = ((Alignment)e.nextElement()).getExtension("id"); + msg += "<uri>"+id+"</uri>"; + } + // -> List of URI + } else if ( method.equals("listmethods") ) { // -> List of String + for( Iterator it = manager.listmethods().iterator(); it.hasNext(); ) { + msg += "<method>"+it.next()+"</method>"; + } + } else if ( method.equals("listrenderers") ) { // -> List of String + for( Iterator it = manager.listrenderers().iterator(); it.hasNext(); ) { + msg += "<renderer>"+it.next()+"</renderer>"; + } + } else if ( method.equals("listservices") ) { // -> List of String + for( Iterator it = manager.listservices().iterator(); it.hasNext(); ) { + msg += "<service>"+it.next()+"</service>"; + } + } else if ( method.equals("store") ) { // URI -> URI + int start; + int end; + String request_id; + String request_uri; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<id>"); + end = message.indexOf("</id>"); + request_id = message.substring(start+4, end); + start = message.indexOf("<uri>"); + end = message.indexOf("</uri>"); + request_uri = message.substring(start+5, end); + + params.setParameter("id", request_id); + params.setParameter("uri", request_uri); + + if ( request_uri != null && !request_uri.equals("") ) { // Load the URL + Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + request_id = answer.getContent(); + } + } + if ( request_id != null ){ // Store it + Message answer = manager.store( new Message(newId(),(Message)null,myId,serverId, request_id, params) ); + + if ( answer instanceof ErrorMsg ) { + msg += testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } + } else if ( method.equals("cut") ) { // URI * string * float -> URI + int start; + int end; + String request_id; + String request_uri; + String request_threshold; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<id>"); + end = message.indexOf("</id>"); + request_id = message.substring(start+4, end); + start = message.indexOf("<uri>"); + end = message.indexOf("</uri>"); + request_uri = message.substring(start+5, end); + start = message.indexOf("<threshold>"); + end = message.indexOf("</threshold>"); + request_threshold = message.substring(start+10, end); + + params.setParameter("id", request_id); + params.setParameter("uri", request_uri); + params.setParameter("threshold", request_threshold); + + if ( request_id != null && !request_id.equals("") && request_threshold != null && !request_threshold.equals("") ){ // Trim it + Message answer = manager.cut( new Message(newId(),(Message)null,myId,serverId, request_id, params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } + } else if ( method.equals("align") ) { // URL * URL * URI * String * boolean * (params) -> URI + int start; + int end; + + String request_url1; + String request_url2; + String request_method; + String request_force; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<url1>"); + end = message.indexOf("</url1>"); + request_url1 = message.substring(start+6, end); + + start = message.indexOf("<url2>"); + end = message.indexOf("</url2>"); + request_url2 = message.substring(start+6, end); + + start = message.indexOf("<method>"); + end = message.indexOf("</method>"); + request_method = message.substring(start+5, end); + + start = message.indexOf("<force>"); + end = message.indexOf("</force>"); + request_force = message.substring(start+7, end); + + params.setParameter("onto1", request_url1); + params.setParameter("onto2", request_url2); + params.setParameter("method", request_method); + params.setParameter("force", request_force); + + Message answer = manager.align( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } else if ( method.equals("find") ) { // URI * URI -> List of URI + int start; + int end; + + String request_url1; + String request_url2; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<url1>"); + end = message.indexOf("</url1>"); + request_url1 = message.substring(start+6, end); + + start = message.indexOf("<url2>"); + end = message.indexOf("</url2>"); + request_url2 = message.substring(start+6, end); + + params.setParameter("onto1", request_url1); + params.setParameter("onto2", request_url2); + + + Message answer = manager.existingAlignments( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } else if ( method.equals("retrieve") ) { // URI -> XML + int start; + int end; + String request_id; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<id>"); + end = message.indexOf("</id>"); + request_id = message.substring(start+4, end); + + params.setParameter("id", request_id); + + Message answer = manager.render( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg += testErrorMessagesSOAP( answer ); + } else { + // Depending on the type we should change the MIME type + // This should be returned in answer.getParameters() + msg += "<result>" + answer.getContent() + "</result>"; + } + } else if ( method.equals("metadata") ) { // URI -> XML + int start; + int end; + String request_id; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<id>"); + end = message.indexOf("</id>"); + request_id = message.substring(start+4, end); + + params.setParameter("id", request_id); + + Message answer = manager.render( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg += testErrorMessagesSOAP( answer ); + } else { + // Depending on the type we should change the MIME type + // This should be returned in answer.getParameters() + msg += "<result>" + answer.getContent() + "</result>"; + } + } else if ( method.equals("load") ) { // URL -> URI + int start; + int end; + String request_url; + Parameters params; + + params = new BasicParameters(); + + start = message.indexOf("<url>"); + end = message.indexOf("</url>"); + request_url = message.substring(start+5, end); + + params.setParameter("url", request_url); + + Message answer = manager.load( new Message(newId(),(Message)null,myId,serverId,"", params) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } else if ( method.equals("loadfile") ) { // XML -> URI + Message answer = manager.loadfile( new Message(newId(),(Message)null,myId,serverId,"", param) ); + if ( answer instanceof ErrorMsg ) { + msg = testErrorMessagesSOAP( answer ); + } else { + msg += displayAnswerSOAP( answer ); + } + } else if ( method.equals("translate") ) { // XML * URI -> XML } else { msg += "<UnRecognizedAction />"; } msg += " </SOAP-ENV:Body></SOAP-ENV:Envelope>"; return msg; } - - // JE//This would be supposed to read the SOAP message - // and add the read values as paramenters - public static Parameters read( String soapMessage, Parameters p ){ - try { - // open the stream - DocumentBuilderFactory docBuilderFactory = - DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); - // JE// We should parse the string here - // JE: I assume that - // docBuilder.parse(new InputSource( new StringReader(soapMessage))); - // would work - Document doc = docBuilder.parse(new File(soapMessage)); - - // normalize text representation - doc.getDocumentElement().normalize(); - - // Get the params - NodeList paramList = doc.getElementsByTagName("param"); - int totalParams = paramList.getLength(); - for (int s = 0; s < totalParams; s++) { - Element paramElement = (Element)paramList.item(s); - String paramName = paramElement.getAttribute("name"); - NodeList paramContent = paramElement.getChildNodes(); - String paramValue =((Node)paramContent.item(0)).getNodeValue().trim(); - p.setParameter(paramName, paramValue); - } - } catch (SAXParseException err) { - System.err.println("** Parsing error: ["+ err.getLineNumber()+"]: "+err.getSystemId()); - System.err.println(" " + err.getMessage()); - } catch (SAXException e) { - Exception x = e.getException(); - ((x == null) ? e : x).printStackTrace(); - } catch (Throwable t) { t.printStackTrace(); } - - return p; + private String displayAnswerSOAP ( Message answer ) { + return answer.SOAPString(); + } + private String testErrorMessagesSOAP( Message answer ) { + return answer.SOAPString(); } - + private int newId() { return localId++; } }