okay here is the response sent by .NET (as you can see .NET didn't understand my String parameter because it should return "hello mystring" and only returns hello :
<?xml version="1.0" encoding="utf-8" ?>
- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <soap:Body>
- <BonjourResponse xmlns="http://tempuri.org/">
<BonjourResult>Bonjour</BonjourResult>
</BonjourResponse>
</soap:Body>
</soap:Envelope>
by the way, when i took the wsdl file to use wsdl2java util, it generated me many classes, but i'm always missing a class it shoudl have generated but didn't
"Method return type org.tempuri.BonjourResponse_Type is missing"
Scott Nichol <[EMAIL PROTECTED]>
02/22/2002 06:33 PM
|
To: [EMAIL PROTECTED] cc: Subject: Re: java client for .NET - what do i ignore ? |
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;
}
}