Hi Olivier
Olivier Cailloux wrote:
Hello,
I am trying to reach a web service using the SOAP package. I succeeded
calling the web service, but not sending parameters to it. After much
research and tries, I think I found that the problem lies in the
namespace including the parameters in the SOAP body.
There's no doubt that the SSOAP package doesn't cover all possible cases
from the SOAP specification. But before adding support for additional
types of server, can you point me to where in the specification or
in the research you did that indicates what the namespace should
be for this situation. That would be helpful.
Since this client - server computing an error could be in either the
client or the server, or both. Looking at the WSDL, it appears
that this might have been created manually. Is this the case? and is the
server implemented via standard toolkits or home-grown? Regardless
of how it is created, we just want to make certain it is correct.
Now, as for an easy solution to the problem....
You can cause the writeSOAPBody() method to avoid defining
a default namespace on the <greetMe> node in the body of the message.
You do this by putting a name on the character vector giving the
namespaces, e.g.
xmlns = c(x = "http://web2.web")
in the call. So
contentGreet <- .SOAP(server=smg8TestService, method="greetMe",
arg0="Olivier", action="",
xmlns=c(x = "http://web2.web/"),
.convert=FALSE)
works just fine.
D.
In short, my question is: how can I send unqualified parameters in the
SOAP body of a call produced through the SOAP package? Details of what I
try to do follow.
The SOAP package sends this soap envelope to my test web service (wsdl
here [http://smg8.ulb.ac.be:8080/web2?wsdl]).
<SOAP-ENV:Envelope
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<greetMe xmlns="http://web2.web/">
<arg0 xsi:type="xsd:string">Olivier</arg0>
</greetMe>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
The R commands used are:
library("SSOAP")
smg8TestService <- SOAPServer("smg8.ulb.ac.be", "/web2/TestService", 8080)
contentGreet <- .SOAP(server=smg8TestService, method="greetMe",
arg0="Olivier", action="", xmlns="http://web2.web/", .convert=FALSE)
But, AFAIU, the arg0 tag should NOT be qualified, according to the WSDL.
Hence, my web service implementation never receives the "Olivier"
argument and rather receives "null" as the string parameter.
When calling the web service using an other client (eclipse Web services
explorer), I see it generates the following body:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://web2.web/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:greetMe>
<arg0>Olivier-from-eclipse</arg0>
</q0:greetMe>
</soapenv:Body>
</soapenv:Envelope>
Thus with the "arg0" tag being unqualified (i.e. not in the
"http://web2.web/" namespace). And that works: my web service
implementation indeed receives the "Olivier-from-eclipse" parameter as
string.
Can anyone confirm that my understanding of what happens and why my web
service implementation, when called by the R client, does not see the
parameters, seems correct?
If it seems correct, then how can I send unqualified parameters in the
SOAP body using the SOAP package? Thanks for any help!
Olivier
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.