You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by El...@lionbridge.com on 2002/02/22 11:54:38 UTC

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;
                }
        }