ActionWebService and namespaces


#1

Hi all,
I’ve tried to search the mailing list, web, etc. and haven’t found
anything that seems to answer my question.

I have a WSDL for a web service written in Java, and I’m trying to
consume it in ruby using ActionWebService. I’ve created my API and some
struct classes. I’ve found the :namespace option to
ActionWebService::Client::Soap.new, but when I try to invoke an action
on the web service I get the following error:

: No Deserializer found to deserialize a
‘urn:rocis-ws-pra-service-IROCIS_PRA_WS:Rocis_ws_pra_service_ROCISSecurityBean’
using encoding style ‘http://schemas.xmlsoap.org/soap/encoding/’.
[java.lang.IllegalArgumentException] (SOAP::FaultError)

From what I gather, this means that my namespaces and element names
(i.e. class names) are not matching up with those declared in the WSDL
file. There are two problems:

  1. The WSDL uses multiple namespaces (one for the SOAP action
    declarations and one for the schema declarations for the input/output of
    those actions, and some others), and I’m not sure which one I should be
    sending to the :namespace option. I’ve tried all of them in turn. My
    impression is that AWS expects the whole WSDL to use a single namespace
    for declaration of actions, data, etc.

  2. The XML element that I’m trying to send is actually
    “rocis_ws_pra_service_ROCISSecurityBean”, but in ruby, classes must be
    capitalized so it’s getting sent that way.

One of both of these could be contributing to my problem. Is there a
way to declare an ActionWebService::Struct and tell it to use a specific
namespace and element name when it is marshalled? Or can I somehow
convince ruby to allow me to declare a class with a name that starts
with a lowercase letter?

I’m not sure I can send the WSDL file, but if more information is needed
I can try to duplicate the problem with a clean room WSDL.

TIA,
Paul Stadig


#2

ActionWebService::Client::Soap is not a general-purpose client. If you
need
a interoperability with other SOAP frameworks, you are better of using
soap4r directly.


Kent

http://www.datanoise.com


#3

Thanks for the reply. I was able to get it to work with soap4r, though
I had a bit of trouble figuring out how to use the wsdl2ruby script.

Paul Stadig