Elise,

Can you post a dump from your sniffer of the response from .NET?  That would
help in understanding whether the 2.2 code can handle it.

Scott Nichol

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, February 22, 2002 11:24 AM
Subject: Re: java client for .NET - what do i ignore ?


(i must specify that i read the SOAP documentation about xsi:type problem,
adapted my code to this problem and had no more results....)
the guiden sample didn't help me, and i still have an error when
retrieving the String from .NET webservice



"Caught SOAPException (SOAP-ENV:Client): No Deserializer found to
deserialize a 'http://tempuri.org/:BonjourResult' using encoding style
'http://schemas.xmlsoap.org/soap/encoding/'."








[EMAIL PROTECTED]
02/22/2002 11:54 AM
Please respond to soap-dev


        To:     [EMAIL PROTECTED]
        cc:
        Subject:        java client for .NET - what do i ignore ?




hi,
i'm still making connection tests from my java client to my .NET
webservice.

i looked at the samples some of you gave me(Scott Nichol with
samples/interop subdirectory of your Apache SOAP
installation) , and other one, the aim was to make a Call() to my .NET
webservice.
I also used a sniffer to look at the soap envelope i'm sending.
First of all, the .NET webservice is expecting SOAP data A (see enclosed
code) but my java client is sending SOAP data B with java client code C,
and as the webservice should return "hello [theString i sent], the result
is simply :

"EndpointURL: http://biztalk:8080/PCS_Integration/SynchronizeProfiles.asmx
Calling EchoString...
EchoByte called with: [B@171afc
EchoByte Result: Hello"



And then i get this error if i use the code D in my java client :

"Caught SOAPException (SOAP-ENV:Client): No Deserializer found to
deserialize a 'http://tempuri.org/:BonjourResult' using encoding style
'http://schemas.xmlsoap.org/soap/encoding/'."



what's wrong ? why can't i still have a correct working connection with a
correct understandable data ? Any code i test doesn't fully work...

any help would be appreciated, as this is just a test part, and i will
have to send a complex data later... I'll never see the end ;)
Elise


==================================================
code A : what is expecting .NET

POST /PCS_Integration/SynchronizeProfiles.asmx HTTP/1.1
Host: biztalk
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/Bonjour";

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
 <soap:Body>
   <Bonjour xmlns="http://tempuri.org/";>
     <strName>string</strName>
   </Bonjour>
 </soap:Body>
</soap:Envelope>


=======================================================
code B : what is sending my java client

<?xml version="1.0" encoding="UTF-8" ?>
- <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/1999/XMLSchema";>
- <SOAP-ENV:Body>
- <ns1:Bonjour xmlns:ns1="http://tempuri.org/";
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
  <strName xsi:type="xsd:string">my string</strName>
  </ns1:Bonjour>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


================================================================
Code C : the corresponding java code


                URL url = new URL
("http://biztalk:8080/PCS_Integration/SynchronizeProfiles.asmx";);

                SOAPMappingRegistry smr = new SOAPMappingRegistry ();
                StringDeserializer sd = new StringDeserializer ();
                smr.mapTypes (Constants.NS_URI_SOAP_ENC,    new QName ("",
"Result"), null, null, sd);

                // create the transport and set parameters
                SOAPHTTPConnection st = new SOAPHTTPConnection();

                // build the call.
                Call call = new Call ();
                call.setSOAPTransport(st);
                call.setSOAPMappingRegistry (smr);

                call.setTargetObjectURI ("http://tempuri.org/";);
                call.setMethodName("Bonjour");
                call.setEncodingStyleURI (Constants.NS_URI_SOAP_ENC);

                Vector params = new Vector();

                params.addElement(new Parameter("strName", String.class,
"my string", null));
                call.setParams(params);

                Response resp = null;
                try {
                  resp = call.invoke (url, "http://tempuri.org/Bonjour";);
                }
                catch (SOAPException e) {
                        System.err.println("Caught SOAPException (" +
e.getFaultCode () + "): " + e.getMessage ());
                        return;
                }

                // check response
                if (resp != null && !resp.generatedFault()) {
                   Parameter ret = resp.getReturnValue();
                  Object value = ret.getValue();

                  System.out.println ("Answer--> " + value);
                }
                else {
                        Fault fault = resp.getFault ();
                        System.err.println ("Generated fault: ");
                        System.out.println (" Fault Code = " +
fault.getFaultCode());
                        System.out.println (" Fault String = " +
fault.getFaultString());
                }





================================================================
code D : The  java code that returns me the SOAPException (SOAP-ENV:Client)

                String sEndpointURL =
"http://biztalk:8080/PCS_Integration/SynchronizeProfiles.asmx";;
                System.out.println("EndpointURL: " + sEndpointURL);
                SynchronizeProfilesProxy profileProxy = new
SynchronizeProfilesProxy(sEndpointURL);

                String theString = "This is a string";
                System.out.println("\nCalling EchoString...");
                System.out.println("EchoByte called with: " + request);
                System.out.println("EchoByte Result: " +
profileProxy.EchoByte(request));

        // This Method uses the "RPC" style of call, and corresponding
Apache 2.2
        // classes to do so.
        public synchronized String EchoByte (byte[] theByte)
           throws SOAPException
        {
                if (_url == null)
                {
                        throw new
SOAPException(org.apache.soap.Constants.FAULT_CODE_CLIENT,
                        "A URL must be specified via setEndPoint(URL).");
                }

                // Map the types.
                SOAPMappingRegistry smr = new SOAPMappingRegistry();
                StringDeserializer ser = new StringDeserializer ();
                smr.mapTypes (Constants.NS_URI_SOAP_ENC,null,
String.class, null, ser);
                _call.setSOAPMappingRegistry(smr);
                _call.setMethodName("Bonjour");
                _call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
                Vector params = new Vector();
                Parameter pTheByte = new Parameter("strName",
String.class, "my string", null);
                params.addElement(pTheByte);
                _call.setParams(params);
                Response resp = _call.invoke(_url, METHOD_NAMESPACE +
"Bonjour");

                // Check the response.
                if (resp.generatedFault())
                {
                        Fault fault = resp.getFault();
                        throw new SOAPException(fault.getFaultCode(),
fault.getFaultString());
                }
                else
                {
                        Parameter retValue = resp.getReturnValue();
                        String theResult = (String)retValue.getValue();
                        return theResult;
                }
        }



Reply via email to