使用Anypoint Studio(MULE)在localhost上找不到资源

时间:2015-01-23 15:37:38

标签: http localhost mule esb mule-studio

我尝试在MuleSoft网站上建议的教程。

我首先从这个例子开始:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
    <http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8084" doc:name="HTTP Listener Configuration"/>
    <flow name="basic_tutorialFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
        <expression-filter expression="#[payload != '/favicon.ico']" doc:name="Expression"/>
        <logger level="INFO" doc:name="Logger" message="Current payload is #[payload]"/>
        <set-payload doc:name="Set Payload" value="#['Hello, ' + message.inboundProperties.'http.request.path' + '. Today is ' + server.dateTime.format('dd/MM/yy') + '.' ]"/>
    </flow>
</mule>

可在此处找到http://www.mulesoft.org/documentation/display/current/Basic+Studio+Tutorial

我是使用拖放功能制作的,然后我在网站上复制了代码,以确保这不是我的错误。

当我输入没有有效负载的URL时,它运行良好。我收到了这个回复

您好,/。今天是2015年1月23日。

但是,当我在教程中添加有效负载时,它不起作用:

找不到资源。

我也尝试了其他例子,只要我不输入有效载荷就行了。这是控制台告诉我的内容:

INFO  2015-01-23 10:33:55,614 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor: Current payload is {NullPayload}
INFO  2015-01-23 10:34:32,794 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: No listener found for request: (GET)/asd
INFO  2015-01-23 10:34:32,796 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: Available listeners are: [(*)/]
INFO  2015-01-23 10:34:36,205 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: No listener found for request: (GET)/world
INFO  2015-01-23 10:34:36,205 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: Available listeners are: [(*)/]

基本上问题是:

INFO  2015-01-23 10:34:36,205 [[basic_tutorial].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: No listener found for request: (GET)/world

2 个答案:

答案 0 :(得分:5)

因此,使用3.6,HTTP连接器发生了巨大变化。以下是一些变化:

  • 以前,HTTP连接器会将路径的内容放在有效负载中。而且,现在您需要按原样调用路径。我的意思是,现在,如果您的终端正在监听http://localhost:8084/,那就是您需要发送请求的地方。在http://localhost:8084/HelloWorld上发送请求将不匹配。

  • 现在发送GET请求会将您的有效负载设置为NullPayload,这是有道理的,因为HTTP GET没有HTTP正文。

我建议如下:让您的终端按照以下方式监听路径:

<http:listener config-ref="HTTP_Listener_Configuration" path="/{name}" doc:name="HTTP"/>

请注意,我添加了名为&#34; name&#34;的占位符变量,您可以将其更改为您喜欢的任何内容。然后,您可以按如下方式访问此占位符:

#[message.inboundProperties['http.uri.params']['name']]

您可以使用此表达式返回一些花​​哨的字符串,如上所述:

<flow name="basic_tutorialFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/{name}"   doc:name="HTTP"/>
    <set-variable variableName="name" value="#[message.inboundProperties['http.uri.params']['name']]" />
    <set-payload doc:name="Set Payload" value="#['Hello, ' + flowVars['name'] + '. Today is ' + server.dateTime.format('dd/MM/yy') + '.' ]"/>
</flow>

干杯, JS

答案 1 :(得分:0)

如前所述,HTTP连接器已从版本3.6开始深度更改。

现在,连接器仅侦听您明确定义的特定路径。

我的问题是,我甚至无法通过ob http://localhost:8080/soap?wsdl获得WSDL。

因此,我发现解决此问题的最简单方法是允许连接器通过使用通配符&#39; *&#39;结束路径来接受所有子路径。

按照我在此处显示的那样更改project.xml:

<http:listener config-ref="HTTP_Listener_Configuration" path="/*" doc:name="HTTP"/>

将处理所有子路径。