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