みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
久しぶりにお世話になります。
FileMaker Pro 18で、SOAP1.1 over httpsでのデータ送受信を設計しています。
最終的にはXSLTを噛ませて「レコードのインポート」にする予定です。
現在はテストの段階なので、変数$xmlに「ファイルから挿入」をやってみているのですが、SOAPサービスからfaultが返ってきます。
SoapUIでテストした段階では正常なレスポンスを確認していますが、PostmanとFileMakerで失敗します。
SoapUIでテストが成功していることから、リクエストボディのXML自体は問題ないと思っておりまして、
FileMaker特有の接続プロトコルで、設定ミスが起きているのかなと推測し、こちらで知恵をお借りできればと思い書き込ませていただきます。
丁寧にエラーメッセージが書かれているようなので、何らかのXMLエラーが起きている、ということはわかりますが、そのエラー内容の説明がよくわかりません…。
【「URLから挿入」の中身】
$soap: リクエストボディとなるSOAP対応のXML
URL: "httpspost://(接続先URL)" & "?" & $soap
curl オプション: curl_requestフィールドに事前にレイアウト上から、以下の通りに入力してある状態。
-H "Content-Type:text/xml ; charset=utf-8"
-H "Content-Length:716"
ターゲット(レスポンス格納先):$xml
【$xmlに返ってきたSOAP faultレスポンス】
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Client</faultcode>
<faultstring>例外により、SOAPメッセージを作成できませんでした: XMLリーダー・エラー: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '%' (code 37) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]</faultstring>
</S:Fault>
</S:Body>
</S:Envelope>
Offline
POSTなので
URL: "httpspost://(接続先URL)" & "?" & $soap
ではなく、
curl オプション で設定するのでは。
--data $soap
Offline
「<のはずなのに%だった」というエラー。
URLがエンコードされているようなので、「自動的にエンコード」のチェックも外したほうがいいでしょう。
お二人ともありがとうございます。
アドバイスをもとに再設定したところ、無事にURLからSOAPリクエストの送受信ができました。
URL: https://(接続先URL)
(httpspost形式は使っていません)
上記に対して、cURLオプションからPOSTしたいデータを送信しました。
$soap: リクエストボディとなるSOAP対応のXML
[cURLオプション]
curl -X POST (URL) \
-H "Content-Type:text/xml ; charset=utf-8" \
-d @$SOAP
なお、URLの自動エンコードについては、チェックをしても、はずしても結果が変わりませんでした。
最初、ヘッダーにContent-LengthをつけてPOSTしていたところエラーになっていたのですが、結果的にこれを外すことで成功しました。
ヘッダー設定の要否はサービスプロバイダに依るところだとは思いますので、あくまでも今回のケースでは、ということになります。
しかしながら、返ってきたSOAP仕様のXMLの<Body>内XMLのタグ「<」と「>」が、すべて実体参照(<と>)になってしまっており、困惑しています。
Envelope部分は「<」「>」となっているのですが、肝心のBody部分を正しくXMLのタグにデコード?してあげないと、「レコードをインポート」でXSLTを噛ませるときに困りますよね…?
試しに、同じ実行条件で、スクリプトをそのまま「レコードをインポート」にてやってみたのですが、インポートできたレコードは0でした(正しく処理できていれば、読み込んだXMLから3件のレコードがインポートされるはずなのです)。
XSLTの記述は正しいものと仮定したとき、正しくインポートできない原因として考えられるのは、やはりこのタグの実体参照でしょうか。
また、このタグの実体参照が原因だった場合、XSLTでのXpathが通じなくなり、「レコードをインポート」によるXMLデータからのレコードインポートは難しいと考えるべきでしょうか。
(その場合、「URLから挿入」で生のXMLを読み込み、何らかの方法で値を抜き出していくとか、XMLをJSONに変換するツールなどを利用して上手にやっていくしかないのでしょうね…)
Last edited by nim (2020-05-26 19:28:42)
Offline
Pages: 1
[ Generated in 0.016 seconds, 10 queries executed - Memory usage: 507.96 KiB (Peak: 512.5 KiB) ]