SOAP question

I ran this code[1] and got these results[2]. As you can see, the resuting
xml is very different from the original. Is there anything I can do to make
the result look like the original?

[1] code

require ‘soap/processor’

str = <<SOAP
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:wsse=“http://schemas.xmlsoap.org/ws/2002/07/secext”>
soap:Header
wsse:Security
wsse:UsernameToken
wsse:UsernameUSERNAME</wsse:Username>
<wsse:Password
Type=“wsse:PasswordDigest”>PASSWORDDIGEST</wsse:Password>
wsse:NonceNONCE</wsse:Nonce>
wsu:Created2003-09-08T05:52:36Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
soap:Body

</soap:Body>
</soap:Envelope>
SOAP

env = SOAP::Processor.unmarshal(str)
puts SOAP::Processor.marshal(env)

[2] result

<?xml version="1.0" encoding="us-ascii" ?>

<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
env:Header
<n1:item xmlns:n1="http://schemas.xmlsoap.org/ws/2002/07/secext"
env:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”>

USERNAME
PASSWORDDIGEST
NONCE
2003-09-08T05:52:36Z

</n1:item>
</env:Header>
env:Body
<n2:DELETE xmlns:n2="http://schemas.xmlsoap.org/wsdl/http/"
xsi:type="n2:DELETE"
env:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”>
</n2:DELETE>
</env:Body>
</env:Envelope>

Hi,

From: “John Didion” john@didion.net
Sent: Friday, March 26, 2004 12:55 PM

I ran this code[1] and got these results[2]. As you can see, the resuting
xml is very different from the original. Is there anything I can do to make
the result look like the original?

require ‘soap/processor’

str = <<SOAP
<soap:Envelope
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/
xmlns:wsu=“http://schemas.xmlsoap.org/ws/2002/07/utility
xmlns:wsse=“http://schemas.xmlsoap.org/ws/2002/07/secext”>
soap:Header
wsse:Security
wsse:UsernameToken
wsse:UsernameUSERNAME</wsse:Username>
<wsse:Password
Type=“wsse:PasswordDigest”>PASSWORDDIGEST</wsse:Password>
wsse:NonceNONCE</wsse:Nonce>
wsu:Created2003-09-08T05:52:36Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
soap:Body

</soap:Body>
</soap:Envelope>
SOAP

env = SOAP::Processor.unmarshal(str)
puts SOAP::Processor.marshal(env)

CVS version of soap4r can handle SOAPHeader better.

Result of your code[1].

<?xml version="1.0" encoding="utf-8" ?>

<env:Envelope xmlns:xsd=“http://www.w3.org/2001/XMLSchema
xmlns:env=“http://schemas.xmlsoap.org/soap/envelope/
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
env:Header
<n1:Security xmlns:n1=“http://schemas.xmlsoap.org/ws/2002/07/secext”>
n1:UsernameToken
n1:UsernameUSERNAME</n1:Username>
n1:PasswordPASSWORDDIGEST</n1:Password>
n1:NonceNONCE</n1:Nonce>
<n2:Created
xmlns:n2=“http://schemas.xmlsoap.org/ws/2002/07/utility”>2003-09-08T05:52:36Z</n2:Created></n1:UsernameToken></n1:Security>
</env:Header>
env:Body
<n3:DELETE xmlns:n3=“http://schemas.xmlsoap.org/wsdl/http/
xsi:type=“n3:DELETE”
env:encodingStyle=“http://schemas.xmlsoap.org/soap/encoding/”>
</n3:DELETE>
</env:Body>
</env:Envelope>

If you don’t want “xsi:type…” in SOAP Body, try

puts SOAP::Processor.marshal(env, {:generate_explicit_type => false})

Body must be;

env:Body
<n3:DELETE xmlns:n3=“http://schemas.xmlsoap.org/wsdl/http/”>
</n3:DELETE>
</env:Body>

You can get the CVS version from
http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/lib/soap4r/

Regards,
// NaHi