in core/src/main/java/flex/messaging/endpoints/amf/SerializationFilter.java [307:382]
public static void handleSerializationException(SerializationContext serializationContext,
ActionContext actionContext, Throwable t, Logger logger) {
ActionMessage responseMessage = new ActionMessage();
actionContext.setResponseMessage(responseMessage);
int bodyCount = actionContext.getRequestMessage().getBodyCount();
for (actionContext.setMessageNumber(0); actionContext.getMessageNumber() < bodyCount; actionContext.incrementMessageNumber()) {
MessageBody responseBody = new MessageBody();
responseBody.setTargetURI(actionContext.getRequestMessageBody().getResponseURI());
actionContext.getResponseMessage().addBody(responseBody);
Object methodResult;
if (t instanceof MessageException) {
methodResult = ((MessageException) t).createErrorMessage();
} else {
String message = "An error occurred while serializing server response(s).";
if (t.getMessage() != null) {
message = t.getMessage();
if (message == null)
message = t.toString();
}
methodResult = new MessageException(message, t).createErrorMessage();
}
if (actionContext.isLegacy()) {
if (methodResult instanceof ErrorMessage) {
ErrorMessage error = (ErrorMessage) methodResult;
ASObject aso = new ASObject();
aso.put("message", error.faultString);
aso.put("code", error.faultCode);
aso.put("details", error.faultDetail);
aso.put("rootCause", error.rootCause);
methodResult = aso;
} else if (methodResult instanceof Message) {
methodResult = ((Message) methodResult).getBody();
}
} else {
try {
Message inMessage = actionContext.getRequestMessageBody().getDataAsMessage();
if (inMessage.getClientId() != null)
((ErrorMessage) methodResult).setClientId(inMessage.getClientId().toString());
if (inMessage.getMessageId() != null) {
((ErrorMessage) methodResult).setCorrelationId(inMessage.getMessageId());
((ErrorMessage) methodResult).setDestination(inMessage.getDestination());
}
} catch (MessageException ignore) {
}
}
responseBody.setData(methodResult);
responseBody.setReplyMethod(MessageIOConstants.STATUS_METHOD);
}
if (Log.isError() && logger != null)
logger.error("Exception occurred during serialization: " + ExceptionUtil.toString(t));
// Serialize the error messages
ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
AmfTrace debugTrace = Log.isDebug() && logger.hasTarget() ? new AmfTrace() : null;
MessageSerializer serializer = serializationContext.newMessageSerializer();
serializer.initialize(serializationContext, outBuffer, debugTrace);
try {
serializer.writeMessage(actionContext.getResponseMessage());
actionContext.setResponseOutput(outBuffer);
} catch (IOException e) {
//Error serializing response
MessageException ex = new MessageException();
ex.setMessage(RESPONSE_ERROR);
ex.setRootCause(e);
throw ex;
}
}