diff --git a/examples/wservice/AlignmentClient.java b/examples/wservice/AlignmentClient.java index 800732928fdc1eaac4f82401226b2d186cfc77c5..bf9686948349cb56a8be16609e60adf26e6a1975 100644 --- a/examples/wservice/AlignmentClient.java +++ b/examples/wservice/AlignmentClient.java @@ -38,6 +38,7 @@ import java.io.File; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.FileInputStream; import java.net.URLConnection; import java.net.HttpURLConnection; import java.net.URL; @@ -60,6 +61,7 @@ public class AlignmentClient { private boolean rest = false; private String filename = null; private String outfile = null; + private String uploadFile = null; private String paramfile = null; private Hashtable services = null; @@ -67,7 +69,7 @@ public class AlignmentClient { private String RESTStr = null; private String SOAPAction = null; private String RESTAction = null; - private String lang = "XML"; + private String renderer = "XML"; public static void main(String[] args) { try { new AlignmentClient().run( args ); } @@ -259,12 +261,16 @@ public class AlignmentClient { RESTParams += "&id=" + uri ; } else if ( cmd.equals("load" ) ) { - // REST? String url = (String)params.getParameter( "arg1" ); + RESTAction = "load"; + messageBody= " <url>"+url+"</url>\n"; + uploadFile = url; + /* if ( url == null ){ SOAPAction = "loadRequest"; //usage(); //System.exit(-1); + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line; String content = ""; @@ -274,14 +280,15 @@ public class AlignmentClient { if (in != null) in.close(); System.err.println(content); messageBody = " <content>"+content+"</content>\n"; + } else { - if ( rest ) { - messageBody = "load?file="+url; - } else { SOAPAction = "loadfileRequest"; + RESTAction = "loadfile"; messageBody = " <url>"+url+"</url>\n"; - } + uploadFile = url; + //RESTParams += ""; } + */ /* This may read the input stream! // Most likely Web service request int length = request.getContentLength(); @@ -304,9 +311,9 @@ public class AlignmentClient { } messageBody = " <alid>"+uri+"</alid>\n <method>"+method+"</method>\n"; RESTParams += "&id=" + uri + "&method=" + method; - } else if ( cmd.equals("metadata" ) ) { - // REST? + } else if ( cmd.equals("metadata" ) ) { SOAPAction = "metadata"; + RESTAction = "metadata"; String uri = (String)params.getParameter( "arg1" ); String key = (String)params.getParameter( "arg2" ); if ( key == null ){ @@ -314,6 +321,7 @@ public class AlignmentClient { System.exit(-1); } messageBody = " <alid>"+uri+"</alid>\n <key>"+key+"</key>\n"; + RESTParams += "&id=" + uri ; } else { usage(); System.exit(-1); @@ -334,19 +342,61 @@ public class AlignmentClient { } public String sendRESTMessage( String message, Parameters param ) throws Exception { + URL RESTUrl = null; + URLConnection connection = null; + HttpURLConnection httpConn = null; - URL RESTUrl = new URL( RESTStr + "/" + message); - // Open a connection with RESTUrl - HttpURLConnection httpConn = (HttpURLConnection)(RESTUrl.openConnection()); - - //switch for return format : HTML or XML (by defaut) - httpConn.setRequestProperty( "lang", lang ); - // REST uses GET method : all parameters are included in URL - httpConn.setRequestMethod( "GET" ); + //httpConn.setRequestProperty( "renderer", renderer ); + //"POST" is used only for "loadfile" + if( RESTAction.equals("load") ) { + RESTUrl = new URL( RESTStr + "/" + RESTAction); + connection = RESTUrl.openConnection(); + + httpConn = (HttpURLConnection) connection; + httpConn.setRequestMethod( "POST" ); + httpConn.setUseCaches ( false ); + httpConn.setDefaultUseCaches (false); + + File f = new File(uploadFile); + FileInputStream fi = new FileInputStream(f); + // set headers and their values. + httpConn.setRequestProperty("Content-Type", + "application/octet-stream"); + httpConn.setRequestProperty("Content-Length", + Long.toString(f.length())); + + // create file stream and write stream to write file data. + httpConn.setDoOutput(true); + httpConn.setDoInput(true); + + OutputStream os = httpConn.getOutputStream(); + + try { + // transfer the file in 4K chunks. + byte[] buffer = new byte[4096]; + //long byteCnt = 0; + int bytes=0; + while (true) { + bytes = fi.read(buffer); + if (bytes < 0) break; + os.write(buffer, 0, bytes ); + } + + os.flush(); + } catch (Exception ex) {} + + os.close(); + fi.close(); + } else { + //switch for return format : HTML or XML (by defaut) + RESTUrl = new URL( RESTStr + "/" + message + "&return=XML"); + //Open a connection with RESTUrl + httpConn = (HttpURLConnection)(RESTUrl.openConnection()); + httpConn.setRequestMethod( "GET" ); + httpConn.setDoOutput(true); + httpConn.setDoInput(true); + } - httpConn.setDoOutput(true); - httpConn.setDoInput(true); - // Read output InputStreamReader isr = new InputStreamReader(httpConn.getInputStream()); BufferedReader in = new BufferedReader(isr); diff --git a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java index 5e49b8e0bf9d438bee5408f9b60714fca673415c..2a7a90793cd18b7651d3db5d1bec8d115be77660 100644 --- a/src/fr/inrialpes/exmo/align/service/WSAServProfile.java +++ b/src/fr/inrialpes/exmo/align/service/WSAServProfile.java @@ -464,11 +464,32 @@ public class WSAServProfile implements AlignmentServiceProfile { msg += " <result>\n" + answer.getContent() + " \n</result>"; } msg += " </retrieveResponse>\n"; - } else if ( method.equals("metadataRequest") ) { // URI -> XML + } else if ( method.equals("metadataRequest") || method.equals("metadata") ) { // URI -> XML + Message answer = null; msg += " <metadataResponse>\n"; - // Not done yet + Parameters params = param; + if( restful == null ) { + params = getParameters( domMessage ); + if ( params.getParameter( "alid" ) == null ) { + answer = new NonConformParameters(0,(Message)null,myId,"",message,(Parameters)null); + } else { + params.setParameter( "id", params.getParameter( "alid" ) ); + } + } + if ( answer == null ) { + params.setParameter( "embedded", "true" ); + params.setParameter( "method", "fr.inrialpes.exmo.align.impl.renderer.XMLMetadataRendererVisitor"); + answer = manager.render( new Message(newId(),(Message)null,myId,serverURL, "", params) ); + } + + if ( answer instanceof ErrorMsg ) { + msg += displayError( answer ); + + } else { + msg += displayAnswer( answer ); + } msg += " </metadataResponse>\n"; - } else if ( method.equals("loadRequest") ) { // URL -> URI + } else if ( method.equals("loadRequest") || method.equals("load") ) { // URL -> URI msg += " <loadResponse>\n"; Parameters params = getParameters( domMessage ); Message answer = null;