Могу ли я вернуть 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;
}
Другие вопросы по тегам