Hi, Sorry for the long post ;-) I have (honestly!) been trying hard to get as simple a java client going for a sexy looking webservice I've seen at xmethods but with no joy. It seems to connect but always returns null. If its ok, I'd like to show the wsdl and my java sources please? So if anyone has a moment can they give me a clue why I get null please?
(My SOAPResponse is an attempt at a generic bean to handle responses. I think the real problem here is my lack of ability to see exactly which fields in the WSDL should be used for the mapping in my source, and how ;-)). Thanks very much in advance...) -- BEGIN WSDL -- <?xml version="1.0" encoding="utf-8"?> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.webservicex.net/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webservicex.net/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace="http://www.webservicex.net/"> <s:element name="Translate"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="LanguageMode" type="s0:Language" /> <s:element minOccurs="0" maxOccurs="1" name="Text" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:simpleType name="Language"> <s:restriction base="s:string"> <s:enumeration value="EnglishTOChinese" /> <s:enumeration value="EnglishTOFrench" /> <s:enumeration value="EnglishTOGerman" /> <s:enumeration value="EnglishTOItalian" /> <s:enumeration value="EnglishTOJapanese" /> <s:enumeration value="EnglishTOKorean" /> <s:enumeration value="EnglishTOPortuguese" /> <s:enumeration value="EnglishTOSpanish" /> <s:enumeration value="ChineseTOEnglish" /> <s:enumeration value="FrenchTOEnglish" /> <s:enumeration value="FrenchTOGerman" /> <s:enumeration value="GermanTOEnglish" /> <s:enumeration value="GermanTOFrench" /> <s:enumeration value="ItalianTOEnglish" /> <s:enumeration value="JapaneseTOEnglish" /> <s:enumeration value="KoreanTOEnglish" /> <s:enumeration value="PortugueseTOEnglish" /> <s:enumeration value="RussianTOEnglish" /> <s:enumeration value="SpanishTOEnglish" /> </s:restriction> </s:simpleType> <s:element name="TranslateResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="TranslateResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="string" nillable="true" type="s:string" /> </s:schema> </types> <message name="TranslateSoapIn"> <part name="parameters" element="s0:Translate" /> </message> <message name="TranslateSoapOut"> <part name="parameters" element="s0:TranslateResponse" /> </message> <message name="TranslateHttpGetIn"> <part name="LanguageMode" type="s:string" /> <part name="Text" type="s:string" /> </message> <message name="TranslateHttpGetOut"> <part name="Body" element="s0:string" /> </message> <message name="TranslateHttpPostIn"> <part name="LanguageMode" type="s:string" /> <part name="Text" type="s:string" /> </message> <message name="TranslateHttpPostOut"> <part name="Body" element="s0:string" /> </message> <portType name="TranslationServiceSoap"> <operation name="Translate"> <documentation>Convert text from one language to another language .Supported languages are English to Chinese, English to French, English to German, English to Italian, English to Japanese, English to Korean, English to Portuguese, English to Spanish, Chinese to English, French to English, French to German, German to English, German to French, Italian to English, Japanese to English, Korean to English, Portuguese to English, Russian to English, Spanish to English.</documentation> <input message="s0:TranslateSoapIn" /> <output message="s0:TranslateSoapOut" /> </operation> </portType> <portType name="TranslationServiceHttpGet"> <operation name="Translate"> <documentation>Convert text from one language to another language .Supported languages are English to Chinese, English to French, English to German, English to Italian, English to Japanese, English to Korean, English to Portuguese, English to Spanish, Chinese to English, French to English, French to German, German to English, German to French, Italian to English, Japanese to English, Korean to English, Portuguese to English, Russian to English, Spanish to English.</documentation> <input message="s0:TranslateHttpGetIn" /> <output message="s0:TranslateHttpGetOut" /> </operation> </portType> <portType name="TranslationServiceHttpPost"> <operation name="Translate"> <documentation>Convert text from one language to another language .Supported languages are English to Chinese, English to French, English to German, English to Italian, English to Japanese, English to Korean, English to Portuguese, English to Spanish, Chinese to English, French to English, French to German, German to English, German to French, Italian to English, Japanese to English, Korean to English, Portuguese to English, Russian to English, Spanish to English.</documentation> <input message="s0:TranslateHttpPostIn" /> <output message="s0:TranslateHttpPostOut" /> </operation> </portType> <binding name="TranslationServiceSoap" type="s0:TranslationServiceSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="Translate"> <soap:operation soapAction="http://www.webservicex.net/Translate" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <binding name="TranslationServiceHttpGet" type="s0:TranslationServiceHttpGet"> <http:binding verb="GET" /> <operation name="Translate"> <http:operation location="/Translate" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> </binding> <binding name="TranslationServiceHttpPost" type="s0:TranslationServiceHttpPost"> <http:binding verb="POST" /> <operation name="Translate"> <http:operation location="/Translate" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> </binding> <service name="TranslationService"> <port name="TranslationServiceSoap" binding="s0:TranslationServiceSoap"> <soap:address location="http://www.webservicex.net/TranslateService.asmx" /> </port> <port name="TranslationServiceHttpGet" binding="s0:TranslationServiceHttpGet"> <http:address location="http://www.webservicex.net/TranslateService.asmx" /> </port> <port name="TranslationServiceHttpPost" binding="s0:TranslationServiceHttpPost"> <http:address location="http://www.webservicex.net/TranslateService.asmx" /> </port> </service> </definitions> -- END WSDL-- -- BEGIN Translate.java -- import java.io.*; import java.util.*; import java.net.*; import org.w3c.dom.*; import org.xml.sax.*; import javax.xml.parsers.*; import org.apache.soap.util.xml.*; import org.apache.soap.*; import org.apache.soap.encoding.*; import org.apache.soap.encoding.soapenc.*; import org.apache.soap.rpc.*; import org.apache.soap.transport.http.SOAPHTTPConnection; public class Translate { public static void main (String[] args) { try { URL url = new URL("http://www.webservicex.com/TranslateService.asmx"); SOAPHTTPConnection st = new SOAPHTTPConnection(); Call call = new Call(); call.setSOAPTransport(st); call.setTargetObjectURI("urn:TranslationServiceSOAP"); call.setMethodName("Translate"); SOAPMappingRegistry smr = new SOAPMappingRegistry(); call.setSOAPMappingRegistry(smr); BeanSerializer beanSer = new BeanSerializer(); smr.mapTypes(Constants.NS_URI_SOAP_ENC, new QName( "http://www.webservicex.net/", "TranslateResult"), SOAPResponse.class, beanSer, beanSer); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector(); params.addElement (new Parameter("LanguageMode", String.class, "EnglishTOFrench", null)); params.addElement (new Parameter("Text", String.class, "Hello", null)); call.setParams(params); Response resp = null; try { resp = call.invoke(url, "http://www.webservicex.net/Translate"); System.out.println(resp); } catch(Exception e) { System.err.println(e.toString()); } Object value = null; if (!resp.generatedFault()) { Parameter ret = resp.getReturnValue(); value = ret.getValue(); } else { Fault fault = resp.getFault(); System.err.println("SOAP call raised fault code:" +fault.getFaultCode() +" Text:"+ fault.getFaultString()); } System.out.println("Return value is "+value); } catch (Exception e) { e.printStackTrace(); } } } -- END Translate.java -- -- BEGIN SOAPResponse.java -- import java.io.*; public class SOAPResponse { public String TranslateResponse; public String TranslateResult; public String string; public String toString() { return TranslateResponse; } public SOAPResponse() {} public String getTranslateResponse() { return TranslateResponse; } public void setTranslateResponse(String TranslateResponse) { this.TranslateResponse = TranslateResponse; } public String getTranslateResult() { return TranslateResult; } public void setTranslateResult(String TranslateResult) { this.TranslateResult = TranslateResult; } public String getString() { return string; } public void setString(String string) { this.string = string; } } -- END SOAPResponse.java --