Thanks for the code I now have my client working.
Blair
on 7/11/01 8:52 AM, Brian Noyes at [EMAIL PROTECTED] wrote:
> Blair,
> Haven't tried it with .NET yet, but imagine it is the same issue as calling
> an MSSOAP service from an Apache Client. You need a return type mapping to
> deserialize the result.
>
> Below is the client code for a simple MSSOAP service call. You can probably
> try the same thing with .NET and get it working.
>
> Hope this helps.
> Brian
>
> // URIs for the service itself, and for the specific action (needs to
> match the method)
> private String serviceURL =
> "http://bnoyesnotebook:80/SOAP/SimpleReceiver2.wsdl";
> private String SOAPActionURI1 =
> "http://tempuri.org/action/SimpleReceiver2.Tune";
> private String SOAPActionURI2 =
> "http://tempuri.org/action/SimpleReceiver2.Name";
> private Call call = new Call();
> protected void makeTheCall()
> {
> URL url;
> try {
> url = new URL(serviceURL);
> }
> catch (MalformedURLException mue)
> {
> System.out.println("Malformed URL!");
> return;
> }
> // Set URIs
> call.setTargetObjectURI("http://tempuri.org/message/");
> call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
>
> // Set up return result type mapping
> SOAPMappingRegistry smr = new SOAPMappingRegistry();
> StringDeserializer sd = new StringDeserializer ();
> smr.mapTypes (Constants.NS_URI_SOAP_ENC,new QName ("", "Result"), null,
> null, sd);
> call.setSOAPMappingRegistry(smr);
>
> // Set up parameters
> Vector params = new Vector();
> Double freqval = new Double(123.45);
> Parameter aStr = new Parameter("freq", double.class, freqval, null);
> params.addElement(aStr);
> call.setParams(params);
>
> // Try invoking the service
> try {
> // First call Tune method
> call.setMethodName("Tune");
> Response resp = call.invoke(url, SOAPActionURI1);
>
> // Check the response.
> if (resp.generatedFault())
> {
> Fault fault = resp.getFault();
> throw new SOAPException(fault.getFaultCode(),
> fault.getFaultString());
> }
> else
> {
> Parameter retValue = resp.getReturnValue();
> String retval = (String)retValue.getValue();
> System.out.println(retval);
> outputArea.append(retval + "\n");
> }
>
> // Now call Name method
> call.setMethodName("Name");
> Vector emptyParams = new Vector();
> call.setParams(emptyParams);
> resp = call.invoke(url, SOAPActionURI2);
>
> // Check the response.
> if (resp.generatedFault())
> {
> Fault fault = resp.getFault();
> throw new SOAPException(fault.getFaultCode(),
> fault.getFaultString());
> }
> else
> {
> Parameter retValue = resp.getReturnValue();
> String retval = (String)retValue.getValue();
> System.out.println(retval);
> outputArea.append(retval + "\n");
>
> }
> }
> catch (SOAPException se)
> {
> System.out.println(se.getMessage());
> return;
> }
> return;
>
> }
>
> -----Original Message-----
> From: Blair Tingey [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, July 11, 2001 8:32 AM
> To: [EMAIL PROTECTED]
> Subject: Apache SOAP Client to MS .NET
>
>
>
> I have been trying to use Apache SOAP classes as a client to a MS .NET
> service without much luck.
>
> There are some .NET services listed on the XMethods site (
> http://www.xmethods.com), they are: Prasad's Stock Quote Service, Breaking
> News Service, and ZipCodes. I have included the code that I have tried to
> use for these services.
>
> Because I am new to SOAP, I know I'm missing something trivial but I
> just can't see it. Can anyone see where I am going wrong?
>
> Thanks,
> Blair Tingey
> [EMAIL PROTECTED]
>
> =============
> Client
> ============
> //
> // Sample client for the GetStock Quote -> MS .NET Service
> //
>
> import java.io.*;
> import java.net.*;
> import java.util.*;
> import org.apache.soap.util.xml.*;
> import org.apache.soap.*;
> import org.apache.soap.rpc.*;
>
> public class GetStockQuote{
>
> public static String GetStock (URL url, String symbol) throws Exception{
>
> Call call = new Call ();
>
> // This service uses standard SOAP encoding
> String encodingStyleURI = Constants.NS_URI_SOAP_ENC;
> call.setEncodingStyleURI(encodingStyleURI);
> call.setTargetObjectURI ("GetNasdaqQuotes");
> call.setMethodName ("GetNasdaqQuotes");
>
> // Create input parameter vector
> Vector params = new Vector ();
> params.addElement (new Parameter("SymbolsAsString", String.class,
> symbol, null));
> call.setParams (params);
>
> // Evoke the service...
> Response resp = call.invoke (url,"
> http://localhost/webservices/GetNasdaqQuotes");
>
> // ... and evaluate the result
> if (resp.generatedFault ()) {
> Fault fault = resp.getFault();
> System.err.println("Generated fault: ");
> System.out.println(" Fault Code = " + fault.getFaultCode());
> System.out.println(" Fault String = " + fault.getFaultString());
> throw new Exception();
> }else {
> // Successful call. Extract result and return value
> Parameter result = resp.getReturnValue ();
> String location = (String) result.getValue();
> return(location);
> }
> }
>
> public static void main(String[] args)
> {
> try {
> URL url=new URL("
> http://www22.brinkster.com/prasads/LiveQuoteService.asmx");
> String stockNews = GetStock(url,"AAPL");
> System.out.println(stockNews);
> }catch (Exception e) {e.printStackTrace();}
> }
> }
>