0

「http://localhost:8080/alpha」でジャージー サービスを構成する次のコードがあります。

*** 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/alpha」を除く「http://localhost:8080」の下のすべてのアドレスを処理する新しい受信エンドポイントを追加したい (例: 「http://localhost:8080/beta」) . これらの新しいアドレスには、1 つのジャージー リソースが必要です。例えば:

*** 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() {...}
    ...
}

特定の URL (つまりアルファ) を除いて、すべてのアドレス (つまりベータとガンマ) をキャプチャするようにミュール インバウンド エンドポイントを設定するにはどうすればよいですか。

ミュール構成でパスをハードコーディングできることはわかっていますが、各アドレス (つまり、ベータとガンマ) には独自のフローとリソース コードが必要になるため、重複が発生します。

上記のコードでは、概念的な例として "http://localhost:8080/*" を使用したことに注意してください。それは動作しません。

- - アップデート - -

beta と gamma uri には、以下を使用してセキュリティが関連付けられていることを忘れていました。

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

エンドポイントに「choice」要素を追加しようとしましたが、choice 決定構造内で spring-security が無効であると不平を言いました。

この機能に対応するソリューションも必要です。

4

1 に答える 1

0

目標を達成する簡単な方法は、フローを 1 つに結合し、選択ルーターを使用することです。この構成では、フローは次のようになります。

<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 に答える