see this article.
 http://www.perfectxml.com/articles/xml/soapguide.asp

Apache SOAP doesn't like a response without xsi:type. This is a known
interop issue between Apache client and MS server. Also an Integer
serializer (and a lot others) is built in SOAPMappingRegistry for SOAP
encoding style. You don't have to set your IntSerializer.

Hope this helps.
Xinju

-----Original Message-----
From: Pete Roth [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, July 24, 2001 12:14 PM
To: Soap-dev List (E-mail)
Subject: response contains zero when should be a value in my Apache Java
c lient to a MS server



I am getting bogus data back from my IIS .NET beta 2 WebService.  I am using
the Java client below, which calls a method (test_AddThem) to add two
numbers and return the result.  This result is always a '0' (zero).  I have
another version of this method which adds the xsi:type attribute to each
element in the returned XML, since Microsoft's server does not normally do
this.  This method works fine and returns the correct result.

I am adding to the mapping registry the deserializer to deserialize the
'test_AddThemResponse' response element as an Integer yet I still get zero
as the result.

I have been trying to find my bug for about 4 hours now with no luck.  Could
someone help me out?  I will be very grateful.  Thanks.



Peter Roth
Telemetry Technologies Inc.
p: 404.231.0021 ext. 1290
e: [EMAIL PROTECTED]

****************************************************************************
*****
JAVA CLIENT

package com.telemetrytech.utils;
/**
 * SoapAddTest.java
 * A class to use the SOAP method test_AddThem on the VNOC server
 * via Java.  This method takes two numbers and returns the result of adding
 * the two together.
 * @author Peter Roth (c) Telemetry Technologies 2001
 */

import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;

public class SoapAddTest {

        public static void main(String args[]) {
                        //Read in the arguments to add
                        if(args.length < 2) { 
                                        System.err.println("USAGE java
SoapAddTest firstNum secondNum"); 
                                        return; 
                        }

                        Integer firstNum  = new Integer (5);
                        Integer secondNum = new Integer(10);
                        try {
                                        firstNum  = new Integer (args[0]);
                                        secondNum = new Integer(args[1]);
                        }catch(NumberFormatException e) {
                                        System.out.println("Number Format
Exception\n");
                                        e.printStackTrace();
                                        return;
                        }

                        //now lets try and run the method on the server
                        try {
                                        //the url of the web service
                                        URL url = 
                                          new URL
("http://63.75.212.11/VnocngWebService/VnocngWebService.asmx";);

                                        Call call = new Call();

                                        //set the unique remote object name
        
call.setTargetObjectURI("http://telemetrytech.net/VnocngWebService";); 

                                        //set the method name and encoding
style
                                        call.setMethodName ("test_AddThem");
        
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
        
                                        // Create the type mapping registry 
                                        SOAPMappingRegistry smr = new
SOAPMappingRegistry(); 
                                        IntDeserializer intDeSer= new
IntDeserializer();
                                        // Map the types. 
        
smr.mapTypes(Constants.NS_URI_SOAP_ENC, 
                                                         new
QName("http://telemetrytech.net/VnocngWebServic
"test_AddThemResult"), 
                                                         null, null,
intDeSer); 
                                        call.setSOAPMappingRegistry(smr); 

                                        //set up the parameters to the
method
                                        Vector params = new Vector ();
                                        params.addElement (new
Parameter("FirstNum", Integer.class, firstNum, null));
                                        params.addElement (new
Parameter("SecondNum", Integer.class, secondNum, null));
                                        call.setParams (params);

        
//System.err.println("HEADER:\n\n"+call.getHeader().toString()+"\n");
        
System.err.println("ENVELOPE:\n\n"+call.buildEnvelope().toString()+"\n");

                                        //connect to the web service and run
the method getting the response back
                                        Response resp = 
        
call.invoke(url,"http://telemetrytech.net/VnocngWebService/test_AddThem"; );

                                        if (resp.generatedFault ()) {
                                                        Fault fault =
resp.getFault ();
                                                        System.out.println
("Ouch, the call failed: ");
                                                        System.out.println
("  Fault Code   = " + fault.getFaultCode ());  
                                                        System.out.println
("  Fault String = " + fault.getFaultString ());
                                        } else {
                                                        Parameter result =
resp.getReturnValue();
        
System.out.println("\n"+resp.toString()+"\n");
        
System.out.println("result of "+ firstNum+ " + "+
        
secondNum+" = "+ result.getValue().toString() );
                                        }

                        }catch(MalformedURLException e) {
                                        System.out.println("error in URL
creation.\n"+e.getMessage()+"\n");
                                        e.printStackTrace();
                                        return;
                        }catch(SOAPException e) {
        
System.out.println("SOAPException\n");
                                        e.printStackTrace();
                                        return;
                        }catch(Exception e) {
                                        System.out.println("error in call
creation.\n"+e.getMessage()+"\n");
                                        e.printStackTrace();
                                        return;
                        }       
        }
}

END JAVA CLIENT
****************************************************************************
***********

Reply via email to