質問

Webサービス用のpythonクライアントを作成することに興味があります。テスト目的のために、単純なスタブサーバーを用意することも非常に興味深いでしょう。 python 2.3とZSI 2.0を使用しています。

問題は、サーバーから例外を返すことができないことです。

wsdlでsoapフォールトに使用される型の例外を発生させると、TypeErrorが発生します。「例外は、EmptyStringException_Defではなく、クラス、インスタンス、または文字列(非推奨)でなければなりません」。これは、フォールトオブジェクトがExceptionのサブクラスではないことを意味しますが、この方法で生成されたコードを変更しても助けにはなりませんでした-そしてもちろん、生成されたコードを変更する必要はありません:)

応答の一部として障害オブジェクトを返す場合、それは無視されます。

ZSIのエラー処理に関するドキュメントが見つかりませんでした。ヒントはありますか?

これは、入力文字列が空の場合にsoapエラーを返す、spellBackwardsという1つのメソッドのみを持つ非常に単純なサービスのサーバーのサンプルコードです。

#!/usr/bin/env python
from ZSI.ServiceContainer import AsServer
from SpellBackwardsService_services_server import *
from SpellBackwardsService_services_types import *
class SpellBackwardsServiceImpl(SpellBackwardsService):
    def soap_spellBackwards(self, ps):
        response = SpellBackwardsService.soap_spellBackwards(self, ps)
        input = self.request._in
        if len(input) != 0:
            response._out = input[::-1]
        else:
            e = ns0.EmptyStringException_Def("fault")
            e._reason = "Empty input string"

            # The following just produces an empty return message:
            # response._fault = e

            # The following causes TypeError
            # raise e

        return response

AsServer(port=8666, services=[SpellBackwardsServiceImpl(),])
役に立ちましたか?

解決

Chris Hoobsによる ZSIクックブックで回答を見つけました。 ZSIホームページの下部:

  

5.4例外
  厄介な質問は、サーバーで障害を生成する方法です。 ZSI v2.0コードで   提供されていますが、これは不可能です。

この論文はプロジェクトのホームページからリンクされているため、これは正しいと思います。
このペーパーでは、ZSIディストリビューションのFault.pyファイルにパッチを当てるという回避策も提案しています。
回避策をテストしましたが、約束どおりに機能します。ライブラリをパッチすることは、テスト目的でのみサーバーを生成する必要があるため(つまり、パッチを当てたライブラリを配布する必要はありません)、私にとって受け入れられるソリューションです。

他のヒント

質問に答えられなかったことをおologiesびします。

しばらくの間、ZSIと戦いました。

現在SUDSを使用しています: https://fedorahosted.org/suds/wiki 、すべてがよりシンプルになりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top