I am implementing a connector to the KEGGAPI web service using JAVA and APACHE AXIS 1.1. However I am getting the following error when I get back data other than a String eg, SSDBResult object or GENESResult object.
Exception:
org.xml.sax.SAXException: No deserializer defined for array type {http://xml.apache.org/xml-soap}SOAPStruct
at org.apache.axis.encoding.ser.ArrayDeserializer.onStartElement(ArrayDeserializer.java:304)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:428)
at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:976)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:722)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
at org.apache.axis.client.Call.invoke(Call.java:2272)
at org.apache.axis.client.Call.invoke(Call.java:2171)
at org.apache.axis.client.Call.invoke(Call.java:1691)
at org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:186)
at $Proxy0.get_all_neighbors_by_gene(Unknown Source)
at KEGG.KEGGConnector.get_all_neighbors_by_gene(KEGGConnector.java:75)
at KEGG.KEGGConnectorTest.main(KEGGConnectorTest.java:87)
; nested exception is:
org.xml.sax.SAXException: No deserializer defined for array type {http://xml.apache.org/xml-soap}SOAPStruct
I was wondering if you know what is causing this error. The code implementation is below.
KEGGConnector class:
public class KEGGConnector implements KEGGPortType{
private KEGGPortType dynamicProxy;
/** Creates a new instance of KEGGConnector */ public KEGGConnector() { dynamicProxy = createDynamicProxy(); }
private KEGGPortType createDynamicProxy() { String urlString; String nameSpaceURI; String serviceName; String portName; URL keggWSDLURL; ServiceFactory serviceFactory; Service keggService; KEGGPortType proxy;
urlString = "http://soap.genome.ad.jp/KEGG.wsdl"; nameSpaceURI = "SOAP/KEGG"; serviceName = "KEGG"; portName = "KEGGPort"; keggWSDLURL = null; serviceFactory = null; keggService = null; proxy = null; try { keggWSDLURL = new URL(urlString); serviceFactory = serviceFactory.newInstance(); keggService = serviceFactory.createService (keggWSDLURL, new QName(nameSpaceURI, serviceName)); proxy = (KEGGPortType) keggService.getPort (new QName(nameSpaceURI, portName), KEGGPortType.class);
} catch (MalformedURLException murle) { System.out.println(murle.getMessage()); } catch (ServiceException se) { System.out.println(se.getMessage()); }
return proxy; }
public SSDBResult[] get_all_neighbors_by_gene (String kid, int threshold, String[] orgs) throws RemoteException { return dynamicProxy.get_all_neighbors_by_gene(kid, threshold, orgs); } }
KEGGConnectorTest class:
public class KEGGConnectorTest {
/** Creates a new instance of KEGGMain */ public KEGGConnectorTest() {
}
static private void printSSDBResults(SSDBResult[] ssdbResults)
{
for (int i = 0; i < ssdbResults.length; i++)
{
System.out.println("SSDB Result " + i + ":\tkid1 -\t" + ssdbResults[i].getKid1());
System.out.println(" \tkid2 -\t" + ssdbResults[i].getKid2());
System.out.println(" \tsw_score -\t" + ssdbResults[i].getSw_score());
System.out.println(" \tident -\t" + ssdbResults[i].getIdent());
System.out.println(" \toverlap -\t" + ssdbResults[i].getOverlap());
System.out.println(" \ts1_start -\t" + ssdbResults[i].getS1_start());
System.out.println(" \ts1_end -\t" + ssdbResults[i].getS1_end());
System.out.println(" \ts2_start -\t" + ssdbResults[i].getS2_start());
System.out.println(" \ts2_end -\t" + ssdbResults[i].getS2_end());
System.out.println(" \tb1 -\t" + ssdbResults[i].getB1());
System.out.println(" \tb2 -\t" + ssdbResults[i].getB2());
System.out.println(" \tdefinition1 -\t" + ssdbResults[i].getDefinition1());
System.out.println(" \tdefinition2 -\t" + ssdbResults[i].getDefinition2());
System.out.println(" \tlength1 -\t" + ssdbResults[i].getLength1());
System.out.println(" \tlength2 -\t" + ssdbResults[i].getLength2());
}
}
public static void main(String[] args) { KEGGConnector keggConnector; SSDBResult[] ssdbResults; String databases; String dbinfo; String[] genes; String[] enzymes; String[] pathways; String[] organisms;
keggConnector = new KEGGConnector();
try
{
System.out.println("TEST :");
System.out.println("Search all the homologous genes for E. coli gene 'b0002', over the default threshold score 100.");
System.out.println("keggConnector.get_all_neighbors_by_gene(\"eco:b0002\", 100, null)\n");
System.out.println("RESULTS:");
organisms = new String[2];
organisms[0] = "ece";
organisms[1] = "hin";
ssdbResults = keggConnector.get_all_neighbors_by_gene("eco:b0002", 500, organisms);
printSSDBResults(ssdbResults);
I would be grateful if you could give me some help on this.
Thanks,
Alex Bond
_________________________________________________________________
Use MSN Messenger to send music and pics to your friends http://www.msn.co.uk/messenger