FAST のカスタム パイプライン ステージでアクセスする外部 Web サービスがあります。私たちのタスクは、この Web サービスによって出力された XML を取得し、それをスコープ フィールドに格納することです。この時点で、次のことを試しました。
Web サービスによる XML 出力をスコープ フィールドに直接入力します (つまり、 を使用します
document.Set('xml', webserviceOutput)
。ここxml
で、 はスコープ フィールドであり、「webserviceOutput」は に似た形式です<?xml version="1.0" encoding="UTF-8" ?><root><element>...</element></root>
)。これは機能せず、FAST パイプラインはログで、データが間違ったタイプ (つまり<type 'str'>
) であると報告しました。また、Web サービスの XML 出力をフラット フィールドに直接入力してから、XMLParser と XMLScopifier を使用して、スコープ フィールドが期待する正しい形式に文字列を変換することも試みました。これも機能せず、FAST パイプラインは、フラット フィールドの XML データが無効であると不平を言いました。詳しく調べたところ、FAST が XML Web サービス出力のすべての山かっこをフラット フィールドにエスケープしてから
<
、>
文字列をフラット フィールドに格納していることがわかりました。これが、XMLParser が文字列を XMLScopifier が期待する正しいオブジェクトに変換できない原因のようです。
上記の 2 番目のエラーを最初に確認したときに何が起こっていたかを判断するために、Web フロントエンドから単純な FQL クエリを実行しました (つまり、http://localhost:15100/cgi-bin/xsearch?offset=0&hits=10&query=a ) 。返された XML のソース ( ctrl+uFirefox など) を確認しました。
対象のフラット フィールドの XML 値に含まれる山かっこと引用符は、すべて and にエスケープされてい<
>
ます"
。<FIELD NAME="body">
当初、これはブラウザーが XML 文字列を正しく表示しようとした結果ではないかと考えていましたが、文字列値 (例: ) にもタグが含まれるbody フィールド (例: ) では同じことが起こりません<sep/>convert the whole structure to <key>a</key> series of maps <sep/>create <key>a</key> dao that handles all interaction with<sep/>
。
結果がブラウザーに送信される直前に FAST が文字をエスケープしている可能性もありますが、これが事実であるかどうかをどのように判断できるかはわかりません。
どうすればこれを解決できますか?
現時点では基本的にこれに行き詰まっており、ここから先に進む方法がまったくわかりません。そのため、助けやヒントがあれば大歓迎です!
どうもありがとう!