2016-08-03 48 views
0

Ich bin neu in Mulesoft Entwicklung. Kürzlich wurde ich gebeten, eine MuleESB-Anwendung zu entwickeln, um einige Werte aus einer kommagetrennten CSV-Datei zu lesen und dann eine REST-API mit den angegebenen Werten aufzurufen. Ich bin mir nicht sicher, ob ich es richtig mache oder auf dem richtigen Weg, um das zu erreichen, wie ich das bekomme WARN 2016-08-03 02: 39: 49,209 [creditsFlow.stage1.02] org.mule.routing. ExpressionSplitter: Splitter lieferte keine Ergebnisse. Wenn dies nicht erwartet wird, überprüfen Sie bitte Ihren Split-Ausdruck und nichts passiert als nächstes.MuleESB zu verbrauchen REST API

Normalerweise ist dies, wie wir die REST-API-Aufruf: https://xx.xx.com/server/CreditPost/views/CreditPost?ID=12345678&CompletionDt=2017-08-03&CourseNbr=90000001

Unten ist der Ausschnitt aus meinem MuleESB Code:

<flow name="creditsFlow"> 
     <file:inbound-endpoint path="C:\Users\kteo1\Downloads\Inbound" responseTimeout="10000" metadata:id="a67520d0-f60d-4b5c-9fc8-3578d6c6434d" doc:name="input file" mimeType="application/csv"> 
      <file:filename-regex-filter pattern="credits_(?:(?!\.csv)(?:.|\n))*\.csv" caseSensitive="true"/> 
     </file:inbound-endpoint> 
     <dw:transform-message metadata:id="0e395c12-6af5-4894-b9c2-f7642816f8d3" doc:name="CSV to XML"> 
      <dw:input-payload doc:sample="list_credits.csv"/> 
      <dw:set-payload><![CDATA[%dw 1.0 
%output application/xml 
--- 
{ 
    credits: { 
     (payload map ((payload01 , indexOfPayload01) -> { 
      credit: { 
       ID: payload01.ID, 
       CourseNbr: payload01.CourseNbr, 
       CompletionDt: payload01.CompletionDt as :string 
      } 
     })) 
    } 
}]]></dw:set-payload> 
     </dw:transform-message> 
     <json:xml-to-json-transformer doc:name="XML to JSON"/> 
     <logger message="#[message.payload]" level="INFO" doc:name="Logger"/> 
     <json:json-to-object-transformer doc:name="JSON to Object"/> 
     <set-variable variableName="totalCredits" value="#[json:credits]" doc:name="totalCredits"/> 
     <set-variable variableName="creditsArrayList" value="#[new java.util.ArrayList()]" doc:name="creditsArrayList"/> 
     <foreach collection="#[json:credit]" doc:name="For Each" > 
      <logger message="#[json:ID]" level="INFO" doc:name="Logger"/> 
      <http:request config-ref="HTTP_Request_Configuration" path="/server/CreditPost/views/CreditPost?ID={ID}&amp;CompletionDt={CompletionDt}&amp;CourseNbr={CourseNbr}" method="GET" doc:name="HTTP"> 
       <http:request-builder> 
        <http:uri-param paramName="ID" value="#[json:ID]"/>      
        <http:uri-param paramName="CompletionDt" value="#[json:CompletionDt]"/> 
        <http:uri-param paramName="CourseNbr" value="#[json:CourseNbr]"/> 
       </http:request-builder> 
      </http:request> 
     </foreach> 
    </flow> 

Bitte beraten.

Antwort

0

Zuerst müssen Sie nicht Daten zu XML und dann zu JSON und dann zu Java umwandeln.

Verwendung so etwas wie

%dw 1.0 
%output application/java 
--- 
(payload map ((payload01 , indexOfPayload01) -> { 
    ID: payload01.ID, 
    CourseNbr: payload01.CourseNbr, 
    CompletionDt: payload01.CompletionDt as :string 
})) 

Es wird Arraylist es Bauer zu beantragen passieren produzieren. Ein anderes Problem betrifft Uri-Params. Sie verwenden Uri-Pamars, verwenden stattdessen Abfrageparameter und greifen auf Felder wie #[payload.ID], #[payload.CourseNbr], #[payload.CompletionDt] zu, während Sie Abfrageparameter festlegen.

 <dw:transform-message doc:name="Transform Message" metadata:id="55f04db1-ed48-4e1f-b966-562768a3c173"> 
     <dw:input-payload doc:sample="list_csv.csv"> 
      <dw:reader-property name="header" value="false"/> 
     </dw:input-payload> 
     <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
--- 
(payload map ((payload01 , indexOfPayload01) -> { 
    ID: payload01.ID, 
    CourseNbr: payload01.CourseNbr, 
    CompletionDt: payload01.CompletionDt as :string 
})) 

]]></dw:set-payload> 
    </dw:transform-message> 
    <foreach doc:name="For Each"> 
     <http:request config-ref="HTTP_Request_Configuration" path="/server/CreditPost/views/CreditPost" method="GET" doc:name="HTTP"> 
      <http:request-builder> 
       <http:query-param paramName="ID" value="#[payload.ID]"/> 
       <http:query-param paramName="CourseNbr" value="#[payload.CourseNbr]"/> 
       <http:query-param paramName="CompletionDt" value="#[payload.CompletionDt]"/> 
      </http:request-builder> 
     </http:request> 
    </foreach> 

Hoffe, das hilft.

+0

Danke für Ihren Rat. Jetzt stieß ich auf einen anderen Fehler, der _Fehler sendende HTTP-Anfrage ist. Message-Payload ist vom Typ: LinkedHashMap_. Ich habe diesen Fehler gesehen, als ich etwas anderes versuchte, aber nicht wirklich verstehe, was es erwartet und warum es nicht funktioniert. –

+0

können Sie bitte beraten? –

+0

Könnten Sie bitte die aktuelle mule-config und die Daten, die Sie testen möchten, posten. – AnupamBhusari