0

我有以下代码在“http://localhost:8080/alpha”配置 Jersey 服务:

*** my mule config ***

<flow name="flow1">
    <inbound-endpoint address="http://localhost:8080/" exchange-pattern="request-response"    />
<jersey:resources>
    <component>
        <singleton-object class="com.address.Flow1Resource"/>
    </component>
</jersey:resources>
</flow>

*** Flow1Resource.java ***

@Path("/alpha")
public class Flow1Resource {...}

我想添加一个新的入站端点来处理“http://localhost:8080”下的所有地址,除了“http://localhost:8080/alpha”(例如“http://localhost:8080/beta”) . 这些新地址需要一个球衣资源。例如:

*** my mule config ***

<flow name="flow1">
    <inbound-endpoint address="http://localhost:8080/" exchange-pattern="request-response"    />
<jersey:resources>
    <component>
        <singleton-object class="com.address.Flow1Resource"/>
    </component>
</jersey:resources>
</flow>

<flow name="flow2">
    <inbound-endpoint address="http://localhost:8080/*" exchange-pattern="request-response"    />
<jersey:resources>
    <component>
        <singleton-object class="com.address.Flow2Resource"/>
    </component>
</jersey:resources>
</flow>

*** Flow1Resource.java ***

@Path("/alpha")
public class Flow1Resource {...}

*** Flow2Resource.java ***

@Path("/")
public class Flow2Resource {
    @Path("beta")
    public void beta() {...}
    @Path("gamma")
    public void gamma() {...}
    ...
}

我如何设置 mule 入站端点以捕获所有地址(即 beta 和 gamma),除了特定的 url(即 alpha)。

我知道我可以对 mule 配置中的路径进行硬编码,但这会导致重复,因为每个地址(即 beta 和 gamma)都需要自己的流和资源代码,它们是相似的。

请注意,我在上面的代码中使用了“http://localhost:8080/*”作为概念示例。这没用。

- - 更新 - -

我忘了提到 beta 和 gamma uri 也具有与它们相关的安全性,使用:

<http:inbound-endpoint ...>
    <spring-security:http-security-filter realm="mule-realm"/>
</http:inbound-endpoint>

我尝试向端点添加“选择”元素,但它抱怨 spring-security 在选择决策结构中无效。

解决方案还需要适应此功能。

4

1 回答 1

0

实现目标的一种简单方法是将流合并为一个并使用选择路由器。在此配置中,您的流程将如下所示:

<flow name="stackoverflowFlow1" doc:name="stackoverflowFlow1">
    <http:inbound-endpoint exchange-pattern="request-response"
        host="localhost" port="8081" doc:name="HTTP" />
    <logger level="ERROR" />
    <choice doc:name="Choice">
        <when expression="#[message.inboundProperties['http.request'] == '/']">
            <processor-chain>
                <logger message="/ invoked " level="ERROR" />
                <jersey:resources doc:name="REST">
                    <component class="Resource" />
                </jersey:resources>
            </processor-chain>
        </when>
        <otherwise>
            <processor-chain>
                <logger message="otherwise invoked " level="ERROR" />

                <jersey:resources doc:name="REST">
                    <component class="ApplicationsResource" />
                </jersey:resources>
            </processor-chain>
        </otherwise>
    </choice>
</flow>

正如您可以想象的那样,您可以在路径或任何其他 http 标头之上做出决定。

您可以在此处找到此路由器文档以及可用于在此处进行选择的最常见 http 属性列表

于 2012-07-07T07:46:19.813 回答