我正在使用JBoss SOA-P 5.2,它應該等同於JBoss ESB 4.10。我們的ESB服務使用Http網關,它監聽來自網站的請求。當JBoss SOA-Platform 5.2上的ESB操作發生異常時,能否返回JSON?
開心路徑都很好:我們可以根據HttpRequest返回一個JSON響應給網站應用程序。問題來自異常路徑,其中java代碼會從操作管道中引發一些異常。有沒有一種方法可以捕獲操作管道中生成的異常並將返回的消息自定義爲Web應用程序?
非常感謝!
我正在使用JBoss SOA-P 5.2,它應該等同於JBoss ESB 4.10。我們的ESB服務使用Http網關,它監聽來自網站的請求。當JBoss SOA-Platform 5.2上的ESB操作發生異常時,能否返回JSON?
開心路徑都很好:我們可以根據HttpRequest返回一個JSON響應給網站應用程序。問題來自異常路徑,其中java代碼會從操作管道中引發一些異常。有沒有一種方法可以捕獲操作管道中生成的異常並將返回的消息自定義爲Web應用程序?
非常感謝!
RedHat建議我們使用RestEasy接受HTTP請求並通過ServiceInvoker發票ESB服務。
該消息可以設置在故障異常消息中。 (ActionProcessingFaultException)
例:
public Message process(Message message) throws ActionProcessingException {
try {
Object obj = payloadProxy.getPayload(message);
String value = "";
if(obj instanceof String) {
value = (String) obj;
} else if(obj instanceof byte[]) {
value = new String((byte[])obj);
}
RouteRequest req = gson.fromJson(value, RouteRequest.class);
if(req == null) {
logger.warn("Invalid JSON Request to Solve Service. "+value);
throw new ActionProcessingException("Invalid JSON Request to Solve Service.");
}
payloadProxy.setPayload(message, req);
} catch (MessageDeliverException e) {
logger.error("Error handling with payload", e);
throw new ActionProcessingException("Error handling with payload", e);
} catch (Exception e) {
String htmlHelp = "<html><body><h1>Bad Format</h1></body></html>";
message.getBody().add(htmlHelp);
throw new ActionProcessingFaultException(message, "Error converting Json Object.");
}
return message;
}
還有一個另外:我曾試圖在@OnException方法來修改ESB消息,但失敗了。 –