2012-06-04 46 views
1

我試圖在Mule 3中創建一個響應GET請求的端點(我認爲這是正確的詞?)。這個Mule應用程序在Web容器內的JavaEE Web應用程序內運行。Mule 3:創建一個REST風格的Web服務端點

在我的web.xml,我有一個MuleRESTReceiverServlet servlet的定義,因此其處理使用網址開頭爲 「/ 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> 

當我發送GET請求到「http:// localhost:8080/webappName/rest/category/service」時,我期望它調用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 /分類/服務」,但仍然得到了同樣的錯誤消息。

我在做什麼錯?謝謝。

回答

2

org.mule.transport.servlet.MuleRESTReceiverServlet使用非常特定的路徑約定,它允許您按名稱或路徑直接查詢現有的Mule端點。閱讀JavaDoc here

對於您的情況,要使用servlet:inbound-endpoint,您需要使用org.mule.transport.servlet.MuleReceiverServlet

+0

David謝謝。我從使用'MuleRESTReceiverServlet'切換到'MuleReceiverServlet',它工作。 – Michael