初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2020-05-26 13:12:00

nim
Member

SOAPリクエストの送受信

久しぶりにお世話になります。

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 '&lt;'
at [row,col {unknown-source}]: [1,1]</faultstring>
   </S:Fault>
  </S:Body>
</S:Envelope>

Offline

#2 2020-05-26 14:35:13

qb_dp
Member

Re: SOAPリクエストの送受信

POSTなので
URL: "httpspost://(接続先URL)" & "?" & $soap
ではなく、
curl オプション で設定するのでは。
--data $soap

Offline

#3 2020-05-26 15:26:30

himadanee
Guest

Re: SOAPリクエストの送受信

「<のはずなのに%だった」というエラー。
URLがエンコードされているようなので、「自動的にエンコード」のチェックも外したほうがいいでしょう。

#4 2020-05-26 19:16:19

nim
Member

Re: SOAPリクエストの送受信

お二人ともありがとうございます。
アドバイスをもとに再設定したところ、無事に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のタグ「<」と「>」が、すべて実体参照(&lt;と&gt;)になってしまっており、困惑しています。
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

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.016 seconds, 10 queries executed - Memory usage: 507.96 KiB (Peak: 512.5 KiB) ]