【问题标题】:Mule 3: Creating a RESTful web service endpointMule 3:创建 RESTful Web 服务端点
【发布时间】:2012-06-05 03:03:31
【问题描述】:

我正在尝试在 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>

我的&lt;flow&gt; 看起来像这样:

<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>

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

我做错了什么?谢谢。

【问题讨论】:

    标签: mule


    【解决方案1】:

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

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

    【讨论】:

    • 大卫谢谢。我从使用MuleRESTReceiverServlet 切换到MuleReceiverServlet 并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多