I posted a similar message in the soap4r group, but there hasn't been
an on-topic message there in a long time. I'm hoping somebody here has
had some experience with soap4r.

I am trying to create a SOAP server using a service provider's WSDL.
Other developers are able to do this and I'm also running related
clients via WSDLs from the save provider. The server is very simple as
it only receives notifications - no response is sent to the client.

Any incoming messages give me this error:

Exception `NoMethodError' at
/usr/local/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/rpc/router.rb:
165
 - undefined method `body' for
#<SOAP::SOAPStruct:0xb7bc32f4>

When I look at the code in that area, I see:

def route(conn_data)
    # we cannot set request_default_encodingsyle before parsing the
content.
    env = unmarshal(conn_data)
    if env.nil?
      raise ArgumentError.new("illegal SOAP marshal format")
    end
    op = lookup_operation(conn_data.soapaction, env.body)  # <=== this
is line 165

I have verified that unmarshal is returning an instance of
SOAP::SOAPStruct with the correct data in it. However, it appears that
unmarshal should be returning an instance of SOAP::SOAPEnvelope, but I
don't understand exactly how that should happen or why it isn't
happening in this case.

I'm guessing it has something to do with the WSDL as there were a
couple small problems regarding the SOAP clients and minOccurs/
nillable attributes. I know the provider is a Java shop and they've
been using Axis2 and these WSDLs are document/literal. I can't post
the entire WSDL, but I can post parts of it if needed.

Has anyone dealt with a similar issue or have some insight into what
might be going on? I hope to be able to dig into the code and solve
this eventually, though in the short term I'll probably code a non-
SOAP server since it's relatively simple data.

Thanks.