package org.transgalactica.fwk.remote.exception; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceAware; import org.springframework.context.MessageSourceResolvable; import org.springframework.context.i18n.LocaleContextHolder; import org.transgalactica.fwk.validation.exception.BusinessException; import org.transgalactica.fwk.validation.exception.ExceptionUtils; import org.transgalactica.fwk.validation.exception.MultipleErrorsException; public class BusinessExceptionConverter implements MessageSourceAware { private MessageSource messageSource; public BusinessExceptionConverter() { } public RemoteBusinessException convert(BusinessException e) { String[] errorCodes = ExceptionUtils.getErrorCodes(e); String errorMessage = getErrorMessage(e); return new RemoteBusinessException(e.getClass().getName(), errorCodes, errorMessage); } protected String getErrorMessage(BusinessException e) { if (e instanceof MultipleErrorsException) { return getErrorMessage((MultipleErrorsException) e); } MessageSourceResolvable msr = ExceptionUtils.getMessageSourceResolvable(e); return messageSource.getMessage(msr, LocaleContextHolder.getLocale()); } protected String getErrorMessage(MultipleErrorsException e) { StringBuffer message = new StringBuffer(); for (MessageSourceResolvable msr : e.getErrors()) { message.append(messageSource.getMessage(msr, LocaleContextHolder.getLocale())); message.append("\n"); } return message.toString(); } /* * IOC */ @Override public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } }