--- /dev/null
+package jalview.io;\r
+\r
+import org.apache.axis.client.*;\r
+\r
+import java.io.*;\r
+\r
+import javax.activation.DataHandler;\r
+import org.apache.axis.AxisFault;\r
+import org.apache.axis.encoding.XMLType;\r
+import javax.xml.rpc.ParameterMode;\r
+import javax.xml.namespace.QName;\r
+import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;\r
+import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;\r
+\r
+\r
+public class EBIFetchClient\r
+{\r
+ Call call;\r
+ String format = "default";\r
+ String style = "raw";\r
+\r
+ public EBIFetchClient()\r
+ {\r
+ try{\r
+ call = (Call)new Service().createCall();\r
+ call.setTargetEndpointAddress(new java.net.URL(\r
+ "http://www.ebi.ac.uk/ws/services/Dbfetch"));\r
+ }catch(Exception ex){}\r
+ }\r
+\r
+\r
+ public String [] getSupportedDBs()\r
+ {\r
+ try{\r
+\r
+ call.setOperationName(new QName("urn:Dbfetch", "getSupportedDBs"));\r
+ call.setReturnType(XMLType.SOAP_ARRAY);\r
+ return (String[]) call.invoke(new Object[]{});\r
+\r
+ }catch(Exception ex){return null;}\r
+ }\r
+\r
+ public String [] getSupportedFormats()\r
+ {\r
+ try{\r
+ call.setOperationName(new QName("urn:Dbfetch", "getSupportedFormats"));\r
+ call.setReturnType(XMLType.SOAP_ARRAY);\r
+ return (String[]) call.invoke(new Object[] {});\r
+\r
+ }catch(Exception ex){ return null; }\r
+ }\r
+\r
+ public String [] getSupportedStyles()\r
+ {\r
+ try{\r
+ call.setOperationName(new QName("urn:Dbfetch", "getSupportedStyles"));\r
+ call.setReturnType(XMLType.SOAP_ARRAY);\r
+ return (String[]) call.invoke(new Object[] {});\r
+\r
+ }catch(Exception ex){return null;}\r
+ }\r
+\r
+ public String [] fetchData(String ids, String f, String s)\r
+ {\r
+ // ids should be of the form uniprot:25KD_SARPE;ADHR_DROPS;\r
+ // max 50 ids can be added at one time\r
+ try{\r
+ call.setOperationName(new QName("urn:Dbfetch", "fetchData"));\r
+ call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
+ call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
+ call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
+ call.setReturnType(XMLType.SOAP_ARRAY);\r
+\r
+ if (f != null)\r
+ format = f;\r
+\r
+ if (s != null)\r
+ style = s;\r
+\r
+ return (String[]) call.invoke(new Object[] {ids, format, style});\r
+\r
+ }catch(Exception ex){return null;}\r
+\r
+ }\r
+\r
+ public String fetchDataFile(String arg, String f, String s)\r
+ {\r
+\r
+ if (f != null)\r
+ format = f;\r
+\r
+ if (s != null)\r
+ style = s;\r
+\r
+\r
+ call.setOperationName(new QName("urn:Dbfetch", "fetchDataFile"));\r
+ call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
+ call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
+ call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
+\r
+ QName qnameAttachment = new QName("urn:Dbfetch", "DataHandler");\r
+ call.registerTypeMapping(javax.activation.DataSource.class,\r
+ qnameAttachment,\r
+ JAFDataHandlerSerializerFactory.class,\r
+ JAFDataHandlerDeserializerFactory.class);\r
+\r
+ call.setReturnType(qnameAttachment);\r
+\r
+ try{\r
+ Object ret = call.invoke(new Object[]\r
+ {arg, format, style});\r
+\r
+ if (null == ret)\r
+ {\r
+ System.out.println("Received null ");\r
+ throw new AxisFault("", "Received null", null, null);\r
+ }\r
+ if (ret instanceof String)\r
+ {\r
+ System.out.println("Received problem response from server: " + ret);\r
+ throw new AxisFault("", (String) ret, null, null);\r
+ }\r
+ if (! (ret instanceof DataHandler))\r
+ {\r
+ //The wrong type of object that what was expected.\r
+ System.out.println("Received problem response from server:" +\r
+ ret.getClass().getName());\r
+ throw new AxisFault("", "Received problem response from server:" +\r
+ ret.getClass().getName(), null, null);\r
+\r
+ }\r
+ //Still here, so far so good.\r
+ DataHandler rdh = (DataHandler) ret;\r
+\r
+ //From here we'll just treat the data resource as file.\r
+ String receivedfileName = rdh.getName(); //Get the filename.\r
+\r
+ if (receivedfileName == null)\r
+ {\r
+ System.err.println("Could not get the file name.");\r
+ throw new AxisFault("", "Could not get the file name.", null, null);\r
+ }\r
+ if (arg.equalsIgnoreCase("medline"))\r
+ {\r
+ return receivedfileName;\r
+ }\r
+ else if (arg.equalsIgnoreCase("interpro"))\r
+ {\r
+ return receivedfileName;\r
+ }\r
+ else\r
+ System.out.println(receivedfileName);\r
+ }catch(Exception ex)\r
+ {}\r
+\r
+ return "ERROR";\r
+ }\r
+\r
+\r
+}\r