2

ミュール アプリケーションで Google オートコンプリートをシミュレートしたいと考えていました。ajax インバウンド エンドポイントを使用して、ブラウザーに入力されているテキスト (rpc 呼び出し) をキャプチャしています。フローの次のステップは、Google によって公開された URL への呼び出しを行うことです。 http://clients5.google.com/complete/search?client=ie8&q=##variable## 同じことを達成するために、ダイナミック HTTP アウトバウンド エンドポイントを使用しました。わかりやすくするために、最後にファイル送信エンドポイントを追加して、HTTP エンドポイントからの完全な応答を確認しました。

<ajax:connector name="AjaxConnectorForSpelling" serverUrl="http://localhost:8081/Ajax" resourceBase="src/main/app/docroot" jsonCommented="false" doc:name="AjaxConnectorForSpelling"/>  

<http:connector name="HTTP_HTTPS" cookieSpec="netscape" validateConnections="true" sendBufferSize="0" receiveBufferSize="0" receiveBacklog="0" clientSoTimeout="10000" serverSoTimeout="10000" socketSoLinger="0" proxyHostname="bci****" proxyPort="8080" doc:name="HTTP\HTTPS"/>  

<http:endpoint exchange-pattern="request-response" method="GET" name="httpgoogle" address="http://clients5.google.com/complete/search?client=ie8&amp;q=#[header:INVOCATION:q]" connector-ref="HTTP_HTTPS" doc:name="HTTP"/>  

<flow name="GoogleAutoComplete" doc:name="GoogleAutoComplete">
    <ajax:inbound-endpoint channel="/services/echo" responseTimeout="10000" connector-ref="AjaxConnectorForSpelling" doc:name="Ajax Channel"/>       
    <message-properties-transformer doc:name="Message Properties" scope="invocation">
        <add-message-property key="q" value="#[payload.get('q')]"/>
    </message-properties-transformer>
    <http:outbound-endpoint ref="httpgoogle" responseTransformer-refs="xml_to_json" doc:name="HTTP"/>   

    <file:outbound-endpoint path="C:\Documents and Settings\I300543\Desktop\proxyfiles\xslt" responseTimeout="10000" doc:name="File"/>

</flow>

Google から xml として応答を受け取り、JSON に変換され、ファイル エンドポイントはそれをファイル システムに書き込むことができます。しかし、私のajaxコネクタは失敗しています(アウトバウンドHTTPエンドポイントを静的にすると、上記の構成ですべてが正常に機能しますが、毎回同じ検索結果が得られます)、ブラウザに返される応答はありません.

この例外が発生しています。

Caused by: org.mule.api.MessagingException: Endpoint scheme must be compatible with the connector scheme. Connector is: "ajax", endpoint is "http://clients5.google.com/complete/search?client=ie8&q=ask" (java.lang.IllegalArgumentException). Message payload is of type: String
at org.mule.endpoint.AbstractEndpointBuilder.doBuildOutboundEndpoint(AbstractEndpointBuilder.java:254)
at org.mule.endpoint.AbstractEndpointBuilder.buildOutboundEndpoint(AbstractEndpointBuilder.java:122)
at org.mule.endpoint.DefaultEndpointFactory.getOutboundEndpoint(DefaultEndpointFactory.java:89)
at org.mule.transport.ajax.AjaxReplyToHandler.processReplyTo(AjaxReplyToHandler.java:66)
at org.mule.routing.requestreply.AbstractReplyToPropertyRequestReplyReplier.processReplyTo(AbstractReplyToPropertyRequestReplyReplier.java:69)

そのため、なぜ ajax コネクタが Http スキームの参照を取得しているのか混乱しています (動的エンドポイントの場合のみ)。ごく最近、Mule の作業を開始したばかりなので、すべてが正しく構成されているかどうかわかりません。

4

1 に答える 1

0

(実験として)試しましたか:

<ajax:connector name="AjaxConnectorForSpelling" ... disableReplyTo="true" />

これにより、ファイルが書き込まれるようになりますが、ブラウザには何も返されません。ajax:outbound-endpoint を試して、応答を別の AJAX Bayeux チャネルに戻すこともできます。

これは、3.2.1 で修正された MULE-5783 に関連している可能性があります。

于 2012-08-21T06:14:17.400 に答える