Hi all, I've been trying to get the SOAP service on biomart.org talking to my Java client, which uses CXF. As you can see from previous posts, this hasn't completely been plain sailing. However, I've gotten over a few hurdles, and hopefully just have one more left.
When calling the getRegistry() method of the Biomart service sitting at http://www.biomart.org:80/biomart/martsoap using soapUI (a great little testing program), it returns the following as the XML (NOT the raw) result: Status: 200 OK Content-Length: 16812 Content-Type: text/xml; charset=utf-8 SOAPServer: SOAP::Lite/Perl/0.710.08 <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd=" http://www.w3.org/2001/XMLSchema" soap:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><getRegistryResponse xmlns="http://www.biomart.org:80/MartServiceSoap"><mart><name xsi:type="xsd:string">ensembl</name><displayName xsi:type="xsd:string">ENSEMBL 52 GENES (SANGER UK)</displayName><database xsi:type="xsd:string">ensembl_mart_52</database><host xsi:type="xsd:string"> www.biomart.org</host><path xsi:type="xsd:string">/biomart/martservice</path><port xsi:type="xsd:string">80</port><visible xsi:type="xsd:int">1</visible><default xsi:type="xsd:int">1</default><serverVirtualSchema xsi:type="xsd:string">default</serverVirtualSchema><includeDatasets xsi:type="xsd:string" /><martUser xsi:type="xsd:string" /><redirect xsi:nil="true" xsi:type="xsd:int" /></mart> [...] </getRegistryResponse></soap:Body></soap:Envelope> ("[...]" added by me so I wouldn't have to print out the entire response. Suffice to say that the entire set of marts was correctly returned.) You'll notice that this result is NOT actually just XML. This is a problem for my java client, which expects only XML in the response. It begins with text, i.e. "Status: 200 OK" and so on. This results in another weird error message when I call getRegistry() from my java client: INFO: Creating Service { http://www.biomart.org:80/MartServiceSoap}BioMartSoapService from WSDL: file:/media/share/unsynched/IdeaProjects/saint/trunk/src/main/resources/biomart.wsdl 09-Jan-2009 15:23:12 org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader. [...] Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'S' (code 83) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] As you can see, it's hung up on a capital "S", which implies that it is the beginning of the response that it doesn't know how to interpret. This is a problem for anyone wanting to use a cxf java client, I think (which could be quite a few people). Is there any way for either me, the user, or the biomart developers to ensure that only XML is returned by the soap server? thanks very much! -- Thanks, Allyson :) Allyson Lister Research Associate Centre for Integrated Systems Biology for Ageing and Nutrition Newcastle University http://www.cisban.ac.uk School of Computing Science Newcastle University Newcastle upon Tyne, NE1 7RU
