problem with soap4r

E

Ernie

I'm trying to write a client that fetches a weather forecast using soap4R.

require 'soap/wsdlDriver'
weather = SOAP::WSDLDriverFactory.new(
"http://www.nws.noaa.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl"
).create_driver

This works ok and weather is created.

My problem is how do I enter the parameters for the function call
the parameters are:
<part name="latitude" type="xsd:decimal" />
<part name="longitude" type="xsd:decimal" />
<part name="product" type="typens:productType" />
<part name="startTime" type="xsd:dateTime" />
<part name="endTime" type="xsd:dateTime" />
<part name="weatherParameters" type="typens:weatherParametersType" />

The weatherParameters variable is an array of booleans eg. maxt, mint,
others


sReceived=NDFDgen("What goes here"........)

Any help would be appreciated.

Ernie
 
S

Scott Rubin

Ernie said:
I'm trying to write a client that fetches a weather forecast using soap4R.

require 'soap/wsdlDriver'
weather = SOAP::WSDLDriverFactory.new(
"http://www.nws.noaa.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl"
).create_driver

This works ok and weather is created.

My problem is how do I enter the parameters for the function call
the parameters are:
<part name="latitude" type="xsd:decimal" />
<part name="longitude" type="xsd:decimal" />
<part name="product" type="typens:productType" />
<part name="startTime" type="xsd:dateTime" />
<part name="endTime" type="xsd:dateTime" />
<part name="weatherParameters" type="typens:weatherParametersType" />

The weatherParameters variable is an array of booleans eg. maxt, mint,
others


sReceived=NDFDgen("What goes here"........)

Any help would be appreciated.

Ernie

I started making a client for that service in Python. The only tricky
part is the array of booleans. If my thinking is correct, a hashmap
will work there. So do something like this.


....
lattitude = 15.0
longitude = 15.0
product = "glance"
startTime = "The time format they use, I forget"
endTime = "The same"
weatherParameters = { 'maxt' => true, 'mint' => false, .... }

Response = NDFDgen( lattitude, longitude, product, startTime, endTime,
weatherParameters )

If my thinking is correct this will work. If it doesn't, then the
hashmap might not be correct. You may have to manually create a SOAP
structure for the weather parameters. Let me know how it goes. The real
trouble you will have is writing a parser for the response, it is in a
very ugly format.
 
E

Ernie

Scott Rubin said:
I started making a client for that service in Python. The only tricky
part is the array of booleans. If my thinking is correct, a hashmap
will work there. So do something like this.


...
lattitude = 15.0
longitude = 15.0
product = "glance"
startTime = "The time format they use, I forget"
endTime = "The same"
weatherParameters = { 'maxt' => true, 'mint' => false, .... }

Response = NDFDgen( lattitude, longitude, product, startTime, endTime,
weatherParameters )

If my thinking is correct this will work. If it doesn't, then the
hashmap might not be correct. You may have to manually create a SOAP
structure for the weather parameters. Let me know how it goes. The real
trouble you will have is writing a parser for the response, it is in a
very ugly format.

Thanks for the help. I've tried this method and others but I keep getting
this message
Unknown element {http://www.w3.org/2001/XMLSchema}simpleType.
Don't know where that error is generated. Tried grepping for 'Unknown' and
'Unknown element' but can't find any files where the phrase 'Unknown
element appears.

After this message I get this
c:/ruby/lib/ruby/site_ruby/1.8/soap/mapping/wsdlRegistry.rb:73:in
`obj2soap': Cannot map String to SOAP/OM. (SOAP::Mapping::MappingError)
I'm sure this error is directly related to the Unknown element message
because this error is occuring when it obj2soap is processing 'product'
which is defined by NOAA's wsdl as xsd:simpleType.
I have no clue what is wrong here. the w2.rog/2001/XMLSchema defines
simpleType. Does soap4r have a problem or does the NOAA wsdl have a
problem?

Ernie
 
N

NAKAMURA, Hiroshi

Hi,

Try wsdl2ruby.rb which is included in soap4r/1.5.2.

0% wsdl2ruby.rb --wsdl ndfdXML.wsdl --classdef --force
I, [2004-07-14T21:02:19.761942 #224] INFO -- app: Creating class
definition.
I, [2004-07-14T21:02:19.762942 #224] INFO -- app: Creates file
'default.rb'.
I, [2004-07-14T21:02:19.767942 #224] INFO -- app: End of app. (status: 0)
0% cat default.rb
# http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd
class WeatherParametersType
@@schema_type = "weatherParametersType"
@@schema_ns =
"http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd"

attr_accessor :maxt
[snip]
attr_accessor :icons

def initialize(maxt = nil, mint = nil, temp = nil, dew = nil, pop12 =
nil, qpf = nil, sky = nil, snow = nil, wspd = nil, wdir = nil, wx = nil,
waveh = nil, icons = nil)
@maxt = maxt
[snip]
@icons = icons
end
end

# http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd
module ProductType
Glance = "glance"
TimeSeries = "time-series"
end
0%

"moduel ProductType" might not be dumped under soap4r/1.5.2. Once you
install ruby's current CVS (or snapshot for 1.8.2), it will be dumped.
So, it should work.

0% ruby -rsoap/wsdlDriver -rdefault -e '
now = Time.now
drv =
SOAP::WSDLDriverFactory.new("http://www.nws.noaa.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl").create_driver
drv.NDFDgen(123, 456, ProductType::Glance, now - 60, now,
WeatherParametersType.new)
'

...though I don't know what is the meaning of each parameter.

Just ignore "simpleType" warning untill 1.8.2 to be released. Sorry for
the inconvenience.

Regards,
// NaHi
 
E

Ernie

Thanks, I'll give this a try. I'm running Windows XP and ruby 1.81. So
I'll double check on the module.
By the way, I have been getting this information via a simple form post to a
web server runing a php script that ships the
xml out in the same form. I don't know how long that service will run, so I
thought I'd give SOAP a try. If NOAA continues the
web service, it will probably be only SOAP.

Thanks again.

Ernie
NAKAMURA said:
Hi,

Try wsdl2ruby.rb which is included in soap4r/1.5.2.

0% wsdl2ruby.rb --wsdl ndfdXML.wsdl --classdef --force
I, [2004-07-14T21:02:19.761942 #224] INFO -- app: Creating class
definition.
I, [2004-07-14T21:02:19.762942 #224] INFO -- app: Creates file
'default.rb'.
I, [2004-07-14T21:02:19.767942 #224] INFO -- app: End of app. (status: 0)
0% cat default.rb
# http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd
class WeatherParametersType
@@schema_type = "weatherParametersType"
@@schema_ns =
"http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd"

attr_accessor :maxt
[snip]
attr_accessor :icons

def initialize(maxt = nil, mint = nil, temp = nil, dew = nil, pop12 =
nil, qpf = nil, sky = nil, snow = nil, wspd = nil, wdir = nil, wx = nil,
waveh = nil, icons = nil)
@maxt = maxt
[snip]
@icons = icons
end
end

# http://www.nws.noaa.gov/forecasts/xml/DWMLgen/schema/ndfdXML.xsd
module ProductType
Glance = "glance"
TimeSeries = "time-series"
end
0%

"moduel ProductType" might not be dumped under soap4r/1.5.2. Once you
install ruby's current CVS (or snapshot for 1.8.2), it will be dumped.
So, it should work.

0% ruby -rsoap/wsdlDriver -rdefault -e '
now = Time.now
drv =
SOAP::WSDLDriverFactory.new("http://www.nws.noaa.gov/forecasts/xml/DWMLgen/w
sdl/ndfdXML.wsdl").create_driver
drv.NDFDgen(123, 456, ProductType::Glance, now - 60, now,
WeatherParametersType.new)
'

..though I don't know what is the meaning of each parameter.

Just ignore "simpleType" warning untill 1.8.2 to be released. Sorry for
the inconvenience.

Regards,
// NaHi
 

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

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top