Mule 3.3.0 - 动态端点发生异常 - 流 - 入站Ajax --->出站Http端点 - >文件出站

时间:2012-08-16 15:34:18

标签: mule

我想在我的mule应用程序中模拟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>

我得到谷歌的响应作为xml,它转换为JSON,文件端点能够将其写入文件系统。但是我的ajax连接器出现故障(使用上述配置可以正常工作如果我将Outbound HTTP端点设置为静态 - 但每次都会给我相同的搜索结果),因此没有响应返回给brower。 / p>

我得到了这个例外。

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,所以我不确定我是否正确配置了everthing。

1 个答案:

答案 0 :(得分:0)

您是否尝试过(作为实验):

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

哪个应该允许文件写入但没有任何内容返回到浏览器。您还可以尝试使用ajax:outbound-endpoint将响应路由到单独的AJAX Bayeux通道。

这可能与MULE-5783有关,修正于3.2.1。