【发布时间】:2014-09-16 18:37:40
【问题描述】:
我的流程是:从 URL 调用 mule url,它使用 json 数据调用 REST 调用。在 mule 流中,在 rest 调用之后,流调用 Java 组件并从 db 中选择数据。现在,问题是,如果 Java 组件中有任何错误,控制台中会打印错误,但来自 rest 的响应总是返回状态 200,即 OK。我需要的是,在应该发回休息调用响应之后,它应该发送异常详细信息或来自 java 组件的响应,即。 Rest 调用后组件的响应和状态不应为 200/OK,它应该发送失败。
<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>
【问题讨论】:
-
您尝试做的事情很可能是可能的,但对我来说,这看起来像是一个设计问题:您应该在 REST 组件中执行所有操作,可能会调用另一个流程来执行数据库操作(然后您将进行常规 JAX-RS 错误处理)或在流程中使用常规组件,因为我怀疑
RestService只有一种方法(然后您将进行常规流程错误处理)。 -
您是在制作 REST 客户端(访问第三方 REST 服务器)、REST 服务器(为您的应用程序提供 REST 功能)还是两者兼而有之(设计类似 REST 代理)?如果你打算拥有 REST 服务器或代理,你可以使用 APIKit 吗?
-
@DavidDossot,你是对的,但这就像完全用 Java 而不是 mule 处理项目。获取rest中的输入值,然后在rest中获取db详细信息并在java代码中处理业务功能,这使得Java代码比mule流更多。我在下面找到了一个带有响应生成器的解决方案。
-
@ZlatinZlatev,我没有使用过 APIKit,我希望这是一个用于 Rest api 的包装类。我的问题会通过使用 APIKit 来解决吗?我正在创建一个休息服务器响应/生成它。
-
@akb 我并不是建议在 Java 中执行您对 Mule 流所做的操作,而是将 Jersey 资源之后的元素移动到另一个流中并从您的资源中调用它。
标签: mule