0

PythonのSUDSに奇妙な問題があります。

SOAP サービスを使用するアプリケーションを作成しています。そして、約2か月間、すべてが順調に進んでいました。突然、動作しなくなりました。ただし、ここが奇妙な部分です。

私が書いた suds manager の単体テストを実行すると、すべてがうまくいき、通常どおりテストに合格します。GUI アプリケーションでコードを実行すると失敗し、次のトレースバックが表示されます。

ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://service.skip.fiskistofa.is/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:getLandings>
         <from>2013-10-11</from>
         <to>2013-10-01</to>
      </ns0:getLandings>
   </ns1:Body>
</SOAP-ENV:Envelope>
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 808, in __bootstrap_inner
    self.run()
  File "/home/fintor/bin/python/aflafrettir/gui/gui.py", line 332, in run
    landings = self.manager.get_landings(self.date_from, self.date_to)
  File "/home/fintor/bin/python/aflafrettir/landings/manager.py", line 66, in get_landings
    return self.call_method('getLandings', date_from, date_to)
  File "/home/fintor/bin/python/aflafrettir/landings/manager.py", line 49, in call_method
    return getattr(self.client.service, method)(*args)
  File "/home/fintor/.virtenvs/aflafrettir/lib/python2.7/site-packages/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "/home/fintor/.virtenvs/aflafrettir/lib/python2.7/site-packages/suds/client.py", line 602, in invoke
    result = self.send(soapenv)
  File "/home/fintor/.virtenvs/aflafrettir/lib/python2.7/site-packages/suds/client.py", line 649, in send
    result = self.failed(binding, e)
  File "/home/fintor/.virtenvs/aflafrettir/lib/python2.7/site-packages/suds/client.py", line 702, in failed
    r, p = binding.get_fault(reply)
  File "/home/fintor/.virtenvs/aflafrettir/lib/python2.7/site-packages/suds/bindings/binding.py", line 265, in get_fault
    raise WebFault(p, faultroot)
WebFault: Server raised fault: 'Couldn't create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'C' (code 67) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]'

失敗したコードは、GUI アプリケーション (PySide) 内のスレッドで実行されています。関連するコードは次のとおりです。

class Worker(Thread):
  signal = AflafrettirSignal()

  def __init__(self, queue, manager, date_from, date_to):
    super(Worker, self).__init__()
    self.queue = queue
    self.manager = manager
    self.date_from = date_from
    self.date_to = date_to
    self.daemon = True

  def run(self):
    landings = self.manager.get_landings(self.date_from, self.date_to)

    for l in landings:
      tmp = Landings()
      tmp.set_variable(l)
      tmp.calc_total_catch()
      self.queue.put(tmp)

    self.signal.work_done.emit(True)

GUIで次のように呼び出されます。

manager = LandingsManager()
manager.set_credentials(self.username, self.password)
manager.get_client()
worker = Worker(self.queue, manager, date_from, date_to)
worker.start()

最後に、正常に動作している unittest モジュールのコードを次に示します。

manager = LandingsManager()
manager.set_credentials(usern, passw)
manager.get_client()
data = manager.get_landings('2013-10-01', '2013-10-11')

get_landings メソッドを呼び出したときに、資格情報と開始日と終了日を設定したときに、ユーザー名とパスワードが同じであることを確認しました。

私が言ったように、これは奇妙な問題であり、ある場所では失敗し、別の場所では機能する原因がわかりません。誰かが原因について教えてくれることを願っています。

編集:

私は何が間違っているかを理解しました。パスワードにはキャリッジ リターンが含まれていましたが、SOAP サービスはそれを好みませんでした。

4

0 に答える 0