Mule 3:创建RESTful Web服务端点

时间:2012-06-04 17:53:44

标签: mule

我正在尝试在Mule 3中创建一个响应GET请求的端点(我认为这是正确的词?)。此Mule应用程序在Web容器内的JavaEE Web应用程序中运行。

在我的web.xml中,我定义了一个MuleRESTReceiverServlet servlet,以便处理URL以“/ rest /”开头的所有请求:

<web-app>
  <listener>
    <listener-class>org.mule.config.builders.MuleXmlBuilderContextListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>muleRESTServlet</servlet-name>
    <servlet-class>org.mule.transport.servlet.MuleRESTReceiverServlet</servlet-class>
    <load-on-startup />
  </servlet>

  <servlet-mapping>
    <servlet-name>muleRESTServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

我的<flow>看起来像这样:

<flow name="myFlow">
  <servlet:inbound-endpoint path="category/service" />      
  <component>
    <singleton-object class="com.company.MyComponent" />
  </component>
  <outbound-endpoint ... />
</flow>

当我向“http:// localhost:8080 / webappName / rest / category / service”发送GET请求时,我希望它能够调用com.company.MyComponent类。但相反,我得到错误:

org.mule.api.endpoint.MalformedEndpointException: The endpoint "service" is malformed and cannot be parsed. If this is the name of a global endpoint, check the name is correct, that the endpoint exists, and that you are using the correct configuration (eg the "ref" attribute). Note that names on inbound and outbound endpoints cannot be used to send or receive messages; use a named global endpoint instead.

我尝试将入站端点定义为全局端点,就像错误消息似乎暗示的那样,但我只是回到了相同的错误。

<servlet:endpoint name="myEndpoint" path="category/service" />
...
<flow name="myFlow">
  <inbound-endpoint ref="myEndpoint" />     
  <component>
    <singleton-object class="com.company.MyComponent" />
  </component>
  <outbound-endpoint ... />
</flow>

我也尝试将“path”属性设置为“rest / category / service”和“/ rest / category / service”,但仍然会收到相同的错误消息。

我做错了什么?感谢。

1 个答案:

答案 0 :(得分:2)

org.mule.transport.servlet.MuleRESTReceiverServlet使用非常特定的路径约定,允许您通过名称或路径直接查询现有的Mule端点。阅读JavaDoc here

在您的情况下,要使用servlet:inbound-endpoint,您需要使用org.mule.transport.servlet.MuleReceiverServlet