soap + wsdl troubles

K

Kero

Hi all,

When using wsdl and soap, I fail to get the contents of a second item
(an
array) in a struct across the wire. I see

<?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:Body>
<n1:AddObservation xmlns:n1=\"http://tempuri.org/\">
<n1:ObserverSenderGUID>service@house:vision</n1:ObserverSenderGUID>
<n1:ObservationEvents>
</n1:ObservationEvents>
</n1:AddObservation>
</env:Body>
</env:Envelope>

as you can see the content of observationEvents is missing.
If I dump the Observation w/ SOAPMarshall, I see this

<?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:Body>
<Observation xmlns:n1="http://www.ruby-lang.org/xmlns/ruby/type/1.6"
xsi:type="n1:Struct"
env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<type="xsd:string">Observation</type>
<member>
<observerSenderGUID
xsi:type="xsd:string">service@house:vision</observerSenderGUID>
<observationEvents n2:arrayType="xsd:anyType[1]"
xmlns:n2="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="n2:Array">
<item xsi:type="n1:Struct">
<type xsi:type="xsd:string">ObservationEvent</type>
<member>
<observerStationGUID
xsi:type="xsd:string">
service@house:vision
</observerStationGUID>

....

where the observationEvents are available, but as "anyType". What I want
(i.e.
given as an example for the service that should work), is this:

<?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>
<AddObservation xmlns="http://tempuri.org/">
<ObserverSenderGUID>string</ObserverSenderGUID>
<ObservationEvents>
<ObservationEvent>
<ObserverStationGUID>string</ObserverStationGUID>
.....

I have absolutely no idea how to obtain this.
The marshalled stuff is not what is going over the wire.
1) What's the difference between the marshalled snippet and what is
going across the wire, anyway?
2) How do I pass the array?

ruby 1.8.3 (2005-09-21) [i486-linux]
(on debian testing)

Regards,
Kero.


The (simplified) code to produce the first two xml snippets this is:

require 'soap/marshal'
require 'soap/wsdlDriver'
require 'time'

server = "prc67241668"
port = 8080
service = "ILSA/ilsaservice.asmx"
url = "http://#{server}:#{port}/#{service}"
wsdl_url = "#{url}?WSDL"
client = SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver
client.wiredump_dev = STDERR

Observation = Struct.new:)observerSenderGUID, :eek:bservationEvents)
class Observation
include SOAP::Marshallable
end

ObservationEvent = Struct.new:)observerStationGUID
# snip rest of fields
)
class ObservationEvent
include SOAP::Marshallable
end

# simplified string for c.l.r purposes
event1 = ObservationEvent.new("service@house:vision")
ary = [event1]

puts SOAP::Marshal.marshal(obs)

puts client.addObservation(
obs = Observation.new(
"urn:ilsa:[email protected]:vision-station-1",
ary
)
)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top