CC: | bug-SOAP-WSDL [...] rt.cpan.org |
Subject: | SOAP::WSDL -- Can't locate object method "set_Action" via package "SOAP::WSDL::OpMessage" |
Date: | Wed, 14 May 2008 11:50:21 +0100 |
To: | martin.kutter [...] fen-net.de |
From: | "Ian Sillitoe" <ian.sillitoe [...] googlemail.com> |
Hi Martin,
Thanks for all your work on SOAP::WSDL - you're doing an excellent job. I
got your email address from CPAN docs - if you prefer some other mode of
communication (mailing-list, forum?) please let me know. I'm trying to use
SOAP::WSDL to test some webservices that I have set up (and to provide a
perl example of "how to set up WS client" on our web pages).
My problem: when connecting to my WSDL, I get the following error from
wsdl2perl (and when using SOAP::WSDL directly):
% wsdl2perl.pl -b CathG3D 'http://ws.cathdb.info/services/CathG3D?wsdl'
Can't locate object method "set_Action" via package
"SOAP::WSDL::OpMessage" at
/opt/perl-5.8.8/lib/site_perl/5.8.8/SOAP/WSDL/Base.pm line 123
at line 525 at
/opt/perl-5.8.8/lib/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 76
SOAP::WSDL version 2.00.01
perl v5.8.8
Linux bsmlx43 2.6.18-53.1.14.el5 #1 SMP Wed Mar 5 11:37:38 EST 2008 x86_64
x86_64 x86_64 GNU/Linux
The WSDL is automatically generated by WebServices Application Server from
wso2 (http://www.wso2.org/wsas) so I don't have much control of exactly what
syntax is used. However, I've run tests on this WSDL with SOAPui (
www.soapui.com) and I can query the server via this WSDL without any
problems. So I'm trying to work out whether the problem is down to the WSDL
or SOAP::WSDL.
Based on the error, it seems this is caused by the "Action" attribute in the
operation message:
<wsdl:portType name="CathG3DPortType">
<wsdl:operation name="get_PdbSuperfamilies_for_GoTerm">
<wsdl:input message="ns1:get_PdbSuperfamilies_for_GoTermRequest" *
wsaw:Action*="urn:get_PdbSuperfamilies_for_GoTerm"/>
<wsdl:output message="ns1:get_PdbSuperfamilies_for_GoTermResponse" *
wsaw:Action*="urn:get_PdbSuperfamilies_for_GoTermResponse"/>
</wsdl:operation>
...
</wsdl:portType>
I'm not sure whether this comes down to a missing attribute in
SOAP::WSDL::OpMessage or a non-standard WSDL. I'm really no WSDL expert, but
the page at http://www.w3.org/TR/ws-addr-wsdl/#explicitaction *seems* to
suggest this syntax is valid. So, assuming this WSDL syntax is valid, then I
"fixed" my local copy of SOAP::WSDL with the following patch:
diff -u /home/bsm3/sillitoe/lib/perl5/SOAP/WSDL/OpMessage.pm
/opt/perl-5.8.8/lib/site_perl/5.8.8/SOAP/WSDL/OpMessage.pm
--- /home/bsm3/sillitoe/lib/perl5/SOAP/WSDL/OpMessage.pm 2008-05-14
11:16:43.000000000 +0100
+++ /opt/perl-5.8.8/lib/site_perl/5.8.8/SOAP/WSDL/OpMessage.pm 2008-05-14
11:26:15.000000000 +0100
@@ -10,6 +10,5 @@
my %header_of :ATTR(:name<header> :default<[]>);
my %headerfault_of :ATTR(:name<headerfault> :default<[]>);
my %message_of :ATTR(:name<message> :default<()>);
-my %action_of :ATTR(:name<Action> :default<[]>);
1;
On the surface, this seems to work fine now (although I'm still checking).
% wsdl2perl.pl -b CathG3D 'http://ws.cathdb.info/services/CathG3D?wsdl'
Creating typemap class MyTypemaps/CathG3D.pm
Creating interface class MyInterfaces/CathG3D/CathG3DSOAP11port_https.pm
Creating interface class MyInterfaces/CathG3D/CathG3DSOAP11port_http1.pm
If you agree with this patch, then it would be great if it could be pushed
out into the next version as this means that I can include SOAP::WSDL as an
example client in my documentation. I would be grateful if you could let me
know what you decide either way as I'm desperately trying to get all this
documentation together for an upcoming release.
Best wishes,
Ian Sillitoe
CATH Team, UCL