2016-04-04 10 views
1

Ich muss eine Ausnahme auslösen, wenn der Abfrageparameter "requestId" in der Anforderungs-URL nicht vorhanden ist.Mule-Throw-Fehler, wenn der Abfrageparameter nicht verfügbar ist

Die URL sieht wie folgt aus: my.server.com?requestId=123&age=26

Hier bin ich der Anmeldung die RequestID in Nachrichteneigenschaft wie folgt aus:

<message-properties-transformer scope="session" doc:name="Adding requestId"> 
    <add-message-property key="requestId" value="#[message.inboundProperties.'http.query.params'.requestId]"/> 
</message-properties-transformer> 

Wenn die URL nicht die requestId enthält es null sein wird. Aber in diesem Fall möchte ich einen Check für requestId ob es vorhanden ist oder nicht. Dann

Antwort

2

Vielen Dank für Ihre Gedanken. Schließlich habe ich einen einfachen Weg mit groovy, wo ich keine Wahl Router oder Expression Filter setzen müssen. Er ist mein Code:

if(!message.getInboundProperty("http.query.params").find{ it.key == "requestId" }){ 
throw new IllegalArgumentException('requestId does not exist'); 

}

0

Verwenden Sie den folgenden Ausdruck, um die Abfrageparameter Verfügbarkeit in HTTP-URL

#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)] 

unter Beispielcode anzeigen zu prüfen, die Wahl Router verwendet und basieren auf Abfrage param Verfügbarkeit leitet er die Kontrolle

<choice doc:name="Choice"> 
     <when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]"> 
      <logger message="Query param available in request level="INFO" doc:name="Logger"/> 
     </when> 
     <otherwise> 
      <logger message="Query param not available in request level="INFO" doc:name="Logger"/> 
     </otherwise> 
    </choice> 
+0

Wenn die Abfrage param Ausfahrten und haben nicht den Wert wie 'http: // localhost: 8081/test requestId = & age = 26' dann der Logger? print 'Query param verfügbar in Anfrageebene', obwohl der Wert nicht dort ist –

+0

Ich stimme mit Ihnen überein Anirban. Die Frage besteht jedoch darin, das Vorhandensein von Abfrageparametern in der HTTP-URL zu überprüfen. Der von Ihnen vorgeschlagene Ansatz ist jedoch robuster, da beide Szenarien überprüft werden. d. h. leerer Abfrageparameter und leerer Wert für diesen Abfrageparameter. Ich werde meine Antwort aktualisieren. – RamakrishnaN

1

Gemäß Ihrer Anforderung können Sie Folgendes tun: -

<choice doc:name="Choice"> 
      <when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]"> 
       <logger message="query parameter exist" level="INFO" doc:name="Logger"/> 

      </when> 
      <otherwise> 
       <logger message="query parameter does not exist" level="INFO" doc:name="Logger"/> 
       <!-- Throw your exception here --> 
       <scripting:component doc:name="Script"> 
        <scripting:script engine="Groovy"><![CDATA[ 
         throw new IllegalArgumentException('query parameter does not exist') 
        ]]></scripting:script> 
       </scripting:component> 
      </otherwise> 
     </choice> 

Hier Wenn Parameter abfragen existiert es wird einfach in einem Logger anmelden und wenn Query-Parameter nicht existiert es wird throw die Ausnahme, die Sie wollen ..

0

Haben Sie versucht Nachrichtenfilter?

<message-filter throwOnUnaccepted="true"> 
     <expression-filter 
      expression="#[message.inboundProperties.'http.query.params'.requestId != empty]" /> 
    </message-filter> 

Dies wird eine FilterUnacceptedException wenn requestId ist null, falsch, leer, Null oder eine leere Sammlung werfen.

Sie müssen die Bedingung ändern, wenn der Filter Null annehmen muss.


Verwandte Themen