我正在使用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消息,但失败了。 –