2014-09-16 8 views
0

Мой поток: из URL-адреса вызывается URL-адрес mule, он вызывает вызов REST с данными json. В потоке мула после вызова останова поток вызывает компонент Java с выбором данных из db. Теперь проблема в том, что если какая-либо ошибка в компоненте Java, ошибка выводится на консоль, но ответ от остального всегда возвращается со статусом 200, т.е. ОК. То, что мне нужно, после того, как ответ на вызов отдыха должен быть отправлен обратно, он должен отправить детали исключения или ответ от компонента java, т.е. ответ от компонента после вызова Rest и статуса не должен быть 200/OK, он должен отправить сбой.mull rest вызов ответа на выполнение ответа

<flow name="exportjournalentriesFlow1" doc:name="exportjournalentriesFlow1" > 
    <http:inbound-endpoint exchange-pattern="request-response" host="${hostname}" port="${port}" path="QBJournalExport/QBGLRest" doc:name="HTTP"/> 
    <jersey:resources doc:name="REST"> 
     <component class="com.mycompany.mulesoft.quickbooks.utils.RestService"/> 
    </jersey:resources>   
    <set-session-variable variableName="restData" value="#[message.payload]" doc:name="Session Variable"/>  
    <db:select config-ref="hrdev" doc:name="Database"> 
     <db:parameterized-query><![CDATA[select company_name, access_token, access_token_secret from dim_access]]></db:parameterized-query> 
    </db:select> 
    <set-session-variable variableName="accessToken" value="#[payload.get(0).get('ACCESS_TOKEN')]" doc:name="Access token Session Variable"/> 
    <custom-transformer name="StringToNameString" class="com.mycompany.mulesoft.quickbooks.utils.GLExportTransformer" doc:name="Java"/>   
    <set-payload value="#[quickbookspoc.CreateJournalEntry.createJournalEntry(payload,sessionVars['accessToken'],sessionVars['accessTokenSecret'])]" doc:name="Set Payload"/>   
</flow> 
+0

То, что вы пытаетесь сделать, это, скорее всего, это возможно, но для меня это выглядит как дизайн вопрос: вы должны либо сделать все ваши действия внутри компонента REST, потенциально вызывающие другой поток для выполнения операций с БД (а затем у вас будет регулярная обработка ошибок JAX-RS) или использование регулярного компонента в потоке, потому что я подозреваю, что 'RestService' имеет только один метод (а затем вы будет иметь регулярную обработку ошибок потока). –

+0

Вы делаете клиент REST (доступ к стороннему серверу REST), сервер REST (предоставляющий возможности REST для вашего приложения) или оба (как для REST-прокси-сервера)? Если у вас есть сервер REST или прокси-сервер, можете ли вы использовать APIKit? –

+0

@DavidDossot, вы правы, но это похоже на полностью управляющий проект на Java вместо mule. Получите входные значения в порядке покоя, а затем получите данные db внутри остальной части и обработайте бизнес-функции внутри java-кода, который делает больше кода Java, чем поток mule. Я нашел решение ниже с построителем ответов. – bekur

ответ

0

Вот решение, которое я нашел:

<custom-transformer name="StringToNameString" class="com.mycompany.mulesoft.quickbooks.utils.GLExportTransformer" doc:name="Java"/>   
<set-payload value="#[quickbookspoc.CreateJournalEntry.createJournalEntry(payload,sessionVars['accessToken'],sessionVars['accessTokenSecret'])]" doc:name="Set Payload"/>   

<choice doc:name="Choice"> 
     <when expression="#[payload == 'SUCCESS']"> 
     <logger message="#[payload]" level="INFO" doc:name="payload"/> 
     </when> 
     <otherwise> 
     <http:response-builder status="500" contentType="application/json" doc:name="Call Back"/> 
     </otherwise> 
</choice> 
Смежные вопросы