我々はで動作するようにSOAPエンドポイントを提供する複数のウェブサービスと通信しているperlでシステムに取り組んでいます。それらはサービスを記述するためのWSDLファイルを提供します(C#.Netでは "Add Service Reference"でこれらを使用します)。これらのファイルをperlモジュールにインポートするには、wsdl2perl.plを使用します。のPerl - SOAP :: WSDL - wsdl2perl.pl
すべてのサービスは、障害を返すときを除いて、取り組んでいます。
私たちは、このようなサービスを呼び出す:
my $service = OurInterfaces::OurService::OurPort->new();
my $result = $service->ourMethod({ someParameter => '1234' });
die $result->get_faultstring()->serialize() if not $result;
我々はフォルト文字列にアクセスしようとすると、私たちのperlスクリプトはこれで死ぬ:
<Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Error deserializing message: Cannot resolve class for Fault/detail/Errors/ErrorDetail via UPSRateTypemaps::RateService at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/MessageParser.pm line 147.
at line 1 at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 82
.
Message was:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><soapenv:Fault><faultcode>Client</faultcode><faultstring>An exception has been raised as a result of client data.</faultstring><detail><err:Errors xmlns:err="http://www.ups.com/schema/xpci/1.0/error"><err:ErrorDetail><err:Severity>Hard</err:Severity><err:PrimaryErrorCode><err:Code>10001</err:Code><err:Description>The XML document is not well formed</err:Description><err:Digest>&lt;/RateRequest> does not close tag &lt;Request>.</err:Digest></err:PrimaryErrorCode><err:Location/></err:ErrorDetail></err:Errors></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope></faultstring><faultactor>urn:localhost</faultactor></Fault>
XMLが障害のために返されることが表示されますクラス(Class :: Std)に正しくマップされていません。どうすればこの問題を解決できますか?
また、エラーメッセージをマップするために必要なことを説明している記事はありますか?ほとんどの部分については、wsdl2perl.plは平凡なの魔法のです。