困っていること
商品マスタを送信するためのAPI(SOAP通信)でリクエスト処理を実行するためのプログラムを
Pythonで作成しているのですが、リクエスト処理を実行するとValueErrorとなり、
うまくいきません(リクエストができていないため、レスポンスも返却されていません)。
どうやら、リクエストパラメータが階層化されているようで、この点に苦戦しています。
時間をかけて色々と試しましたが解決に辿り着けないため、力を貸して頂きたいと思い、
投稿させて頂きました。
APIのWSDLを「mzeep」で解析した結果
python -mzeep C:\test.wsdl ## 以下は、mzeep で解析された結果から関係する部分を抜粋したものです。 Global elements: ns1:MstRequest(ns1:MstRequest) Global types: ns1:ArrayOfcolum(colum: ns1:colum[]) ns1:ArrayOfcolumname(columname: ns1:columname[]) ns1:MstRequest(kigyocd: xsd:string, kigyopwd: xsd:string, mstname: xsd:string, columnames: ns1:ArrayOfcolumname, colums: ns1:ArrayOfcolum) ns1:colum(DATAValue: xsd:string) ns1:columname(FIELD: xsd:string) Bindings: Service: ShohinInfomation Operations: ShohinMstDataRq(kigyocd: xsd:string, kigyopwd: xsd:string, mstname: xsd:string, columnames: ns1:ArrayOfcolumname, colums: ns1:ArrayOfcolum) -> kigyocd: xsd:string, mstname: xsd:string, kbn: xsd:boolean, msg: xsd:string
リクエストプログラム
上で記載した解析結果を元に私が作成したリクエストのためのプログラムは、以下の通りです。
from zeep import Client from zeep.transports import Transport from requests.auth import HTTPBasicAuth from requests import Session # ローカルに保存しているWSDLファイルを読み込み WSDL = 'C:\test.wsdl' # SOAPクライアントを作成 client = Client(WSDL) # 項目定義を読み込み request_type = client.get_element('ns1:MstRequest') # 項目名称を定義 name = {} name['columname'] = {} name['columname']['FIELD']= ['KGYOUCD','SHOHINCD','BUNRUI','YUKOKBN'] # 項目名称に対する値を定義 data = {} data['colum'] = {} data['colum']['DATAValue']= ['TESTKIGYO','RD3000','0020','0'] # リクエストパラメータをセット request = request_type(kigyocd = 'TESTKIGYO' , kigyopwd = 'TESTPW' , mstname = 'SHMST', columnames = name , colums = data ) # リクエスト処理を実行 response = client.service.ShohinMstDataRq(request)
リクエストプログラムの実行結果
上に記載したプログラムを実行した結果、以下のエラーが表示されます。以下のエラーメッセージは、
最終行「response = client.service.ShohinMstDataRq(request)」実行後に出力されたものです。
raise ValueError( ValueError: The String type doesn't accept collections as value
エラー表示後に、変数「request」の値を確認するため、以下を実行。
>>> print(request) { 'kigyocd': 'TESTKIGYO', 'kigyopwd': 'TESTPW', 'mstname': 'SHMST', 'columnnames': { 'columnname': { 'FIELD': [ 'KGYOUCD', 'SHOHINCD', 'BUNRUI', 'YUKOKBN' ] } }, 'columns': { 'column': { 'DATAValue': [ 'TESTKIGYO', 'RD3000', '0020', '0' ] } } }
エラー表示後に、変数「request」の型を確認するため、以下を実行。
>>> type(request) <class 'zeep.objects.MstRequest'> >>>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/17 09:05
2021/05/17 09:09