1

バックエンド レスト サービスのプロキシを実行したいのですが、リクエストをバックエンドに転送する前に、いくつかのチェックを行う必要があります。ドキュメントを確認したところ、プロキシを実行するために使用できる http-proxy がありますが、フローに入れると例外があります。http:outbound-endpoint を使用する場合、メソッドを動的 MEL 式にすることはできません (残りのメソッドは POST、GET、PUT、DELTE などにすることができます)。

提案をいただけますか?例はより良いでしょう、どうもありがとう。私の構成:

<flow name="demo.routerFlow1" doc:name="demo.routerFlow1">
  <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8080" doc:name="HTTP" />
  <logger
    message="Method: #[message.inboundProperties['http.method']], URI: #[message.inboundProperties['http.request.path']], Params: #[message.inboundProperties['http.query.params']]"
    level="INFO" doc:name="Logger" />
  <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map" />
  <choice doc:name="Choice">
    <when expression="(payload['timestamp'] == null || payload['nonce'] == null)">
      <expression-component doc:name="Check Required Params"><![CDATA[payload="{\"code\":\"PA001\", \"message\":\"missing required parameter timestamp and nonce\"}"]]>
      </expression-component>
    </when>
    <otherwise>
      <choice doc:name="Choice">
        <when expression="!replayAttackCheck.validate(payload)" evaluator="groovy">
          <expression-component doc:name="Check Required Params"><![CDATA[payload="{\"code\":\"PA002\", \"message\":\"timestamp or nonce is illegal\"}"]]>
          </expression-component>
        </when>
        <otherwise>
          <processor-chain doc:name="Processor Chain">
            <pattern:http-proxy name="http-proxy-sample"> <!--line 38-->
              <http:inbound-endpoint address="http://localhost:8080/"></http:inbound-endpoint>
              <http:outbound-endpoint address="http://localhost:8081/"></http:outbound-endpoint>
            </pattern:http-proxy>
          </processor-chain>
        </otherwise>
      </choice>
    </otherwise>
  </choice>
</flow>

エラー:

Caused by: org.xml.sax.SAXParseException; lineNumber: 38; columnNumber: 31; cvc-complex-type.2.4.b: The content of element 'processor-chain' is not complete. One of '{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/core":description, "http://www.mulesoft.org/schema/mule/core":abstract-message-processor, "http://www.mulesoft.org/schema/mule/core":abstract-outbound-endpoint, "http://www.mulesoft.org/schema/mule/core":abstract-mixed-content-message-processor}' is expected.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
4

2 に答える 2

1

必要なのは、それ以外のブロックで実際の残りのサービスへの http:outbound だけです。

以下を使用してみてください。

<otherwise>
          <http:outbound-endpoint address="http://localhost:8081/"></http:outbound-endpoint>
</otherwise>

お役に立てれば。

于 2013-08-09T12:08:06.260 に答える