Могу ли я вернуть JSON, когда в действиях ESB на JBoss SOA-Platform 5.2 произошло исключение?
Я использую JBoss SOA-P 5.2, который должен быть эквивалентен JBoss ESB 4.10. А наш сервис ESB использует Http-шлюз, который прослушивает запрос с веб-сайта.
Счастливый путь - это хорошо: мы можем вернуть JSON-ответ приложению веб-сайта в соответствии с HttpRequest. Проблема возникает из-за исключительного пути, где код Java выдает какое-то исключение из конвейера действий. Есть ли способ, которым мы можем перехватить исключение, сгенерированное в конвейере действий и настроить возвращенное сообщение для веб-приложения?
Большое спасибо!
2 ответа
RedHat предлагает нам использовать RestEasy для приема HTTP-запросов и выставления счета-фактуры на ESB через ServiceInvoker.
Сообщение может быть установлено в сообщении об исключении ошибки. (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;
}