Example usage for org.springframework.messaging.converter MessageConversionException MessageConversionException

List of usage examples for org.springframework.messaging.converter MessageConversionException MessageConversionException

Introduction

In this page you can find the example usage for org.springframework.messaging.converter MessageConversionException MessageConversionException.

Prototype

public MessageConversionException(Message<?> failedMessage, String description) 

Source Link

Usage

From source file:org.springframework.cloud.aws.messaging.support.converter.NotificationRequestConverter.java

@Override
public Object fromMessage(Message<?> message, Class<?> targetClass) {
    Assert.notNull(message, "message must not be null");
    Assert.notNull(targetClass, "target class must not be null");

    JsonNode jsonNode;//from  w w w.  j a va2 s .  co  m
    try {
        jsonNode = this.jsonMapper.readTree(message.getPayload().toString());
    } catch (Exception e) {
        throw new MessageConversionException("Could not read JSON", e);
    }
    if (!jsonNode.has("Type")) {
        throw new MessageConversionException(
                "Payload: '" + message.getPayload() + "' does not contain a Type attribute", null);
    }

    if (!"Notification".equals(jsonNode.findValue("Type").asText())) {
        throw new MessageConversionException(
                "Payload: '" + message.getPayload() + "' is not a valid notification", null);
    }

    if (!jsonNode.has("Message")) {
        throw new MessageConversionException(
                "Payload: '" + message.getPayload() + "' does not contain a message", null);
    }

    String messagePayload = jsonNode.findPath("Message").asText();
    GenericMessage<String> genericMessage = new GenericMessage<>(messagePayload,
            getMessageAttributesAsMessageHeaders(jsonNode.findPath("MessageAttributes")));
    return new NotificationRequest(jsonNode.findPath("Subject").asText(),
            this.payloadConverter.fromMessage(genericMessage, targetClass));
}

From source file:org.springframework.cloud.stream.converter.JsonUnmarshallingConverter.java

@Override
protected Object convertFromInternal(Message<?> message, Class<?> targetClass, Object conversionHint) {
    Object payload = message.getPayload();
    try {//  w w w  .ja  v  a 2 s . co m
        return payload instanceof byte[] ? objectMapper.readValue((byte[]) payload, targetClass)
                : objectMapper.readValue((String) payload, targetClass);
    } catch (IOException e) {
        throw new MessageConversionException("Cannot parse payload ", e);
    }
}

From source file:com.kinglcc.spring.jms.core.Jackson2PayloadArgumentResolver.java

private Object convertClassFromMessage(Message<?> message, Class<?> targetClass) {
    Object payload = this.converter.fromMessage(message, targetClass);
    if (payload == null) {
        throw new MessageConversionException(message,
                "No converter found to convert to " + targetClass + ", message=" + message);
    }//from   w w  w.  j a v  a 2s  .  c om
    return payload;
}

From source file:ch.rasc.wampspring.method.PayloadArgumentResolver.java

@Override
public Object resolveArgument(MethodParameter param, Message<?> message) throws Exception {
    Payload ann = param.getParameterAnnotation(Payload.class);
    if (ann != null && StringUtils.hasText(ann.value())) {
        throw new IllegalStateException("@Payload SpEL expressions not supported by this resolver");
    }//  w  ww  . j  a va 2  s  .c  o  m

    Object payload = message.getPayload();
    if (isEmptyPayload(payload)) {
        if (ann == null || ann.required()) {
            String paramName = getParameterName(param);
            BindingResult bindingResult = new BeanPropertyBindingResult(payload, paramName);
            bindingResult.addError(new ObjectError(paramName, "@Payload param is required"));
            throw new MethodArgumentNotValidException(message, param, bindingResult);
        }
        return null;
    }

    Class<?> targetClass = param.getParameterType();
    if (ClassUtils.isAssignable(targetClass, payload.getClass())) {
        validate(message, param, payload);
        return payload;
    }

    payload = this.methodParameterConverter.convert(param, message.getPayload());
    if (payload == null) {
        throw new MessageConversionException(message,
                "No converter found to convert to " + targetClass + ", message=" + message);
    }

    validate(message, param, payload);
    return payload;
}

From source file:com.kinglcc.spring.jms.core.Jackson2PayloadArgumentResolver.java

private Object convertJavaTypeFromMessage(Message<?> message, MethodParameter parameter) {
    Type targetType = parameter.getGenericParameterType();
    Class<?> contextClass = parameter.getContainingClass();
    Object payload = ((GenericMessageAdapterConverter) converter).fromMessage(message, targetType,
            contextClass);//  ww  w . j a v  a 2s  .c om
    if (payload == null) {
        throw new MessageConversionException(message,
                "No converter found to convert to " + targetType + ", message=" + message);
    }
    return payload;
}

From source file:dstrelec.nats.listener.adapter.MessagingMessageListenerAdapter.java

/**
 * Invoke the handler, wrapping any exception to a {@link NatsException}
 * with a dedicated error message.//from  w  w  w.  jav a2s .c o  m
 * @param data the data to process during invocation.
 * @param message the message to process.
 * @return the result of invocation.
 */
protected final Object invokeHandler(Object data, Message<?> message) {
    try {
        if (data instanceof List && !this.isConsumerRecordList) {
            return this.handlerMethod.invoke(message);
        } else {
            return this.handlerMethod.invoke(message, data);
        }
    } catch (org.springframework.messaging.converter.MessageConversionException ex) {
        throw new NatsException(createMessagingErrorMessage(
                "Listener method could not " + "be invoked with the incoming message", message.getPayload()),
                new MessageConversionException("Cannot handle message", ex));
    } catch (MessagingException ex) {
        throw new NatsException(createMessagingErrorMessage(
                "Listener method could not " + "be invoked with the incoming message", message.getPayload()),
                ex);
    } catch (Exception ex) {
        throw new NatsException("Listener method '" + this.handlerMethod.getMethodAsString(message.getPayload())
                + "' threw exception", ex);
    }
}

From source file:org.springframework.cloud.aws.messaging.support.converter.ObjectMessageConverter.java

@Override
public Object convertFromInternal(Message<?> message, Class<?> targetClass) {
    String messagePayload = message.getPayload().toString();
    byte[] rawContent = messagePayload.getBytes(this.encoding);
    if (!(Base64.isBase64(rawContent))) {
        throw new MessageConversionException("Error converting payload '" + messagePayload
                + "' because it is not a valid base64 encoded stream!", null);
    }//from  w  w w. ja  v  a 2  s.co m
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(rawContent);
    Base64InputStream base64InputStream = new Base64InputStream(byteArrayInputStream);
    Serializable result = null;
    ObjectInputStream objectInputStream = null;
    try {
        objectInputStream = new ObjectInputStream(base64InputStream);
        result = (Serializable) objectInputStream.readObject();
    } catch (ClassNotFoundException e) {
        throw new MessageConversionException(
                "Error loading class from message payload, make sure class is in classpath!", e);
    } catch (IOException e) {
        throw new MessageConversionException("Error reading payload from binary representation", e);
    } finally {
        if (objectInputStream != null) {
            try {
                objectInputStream.close();
            } catch (IOException e) {
                LOGGER.warn("Error closing object output stream while reading message payload", e);
            }
        }
    }

    return result;
}

From source file:org.springframework.cloud.aws.messaging.support.converter.ObjectMessageConverter.java

@Override
public Object convertToInternal(Object payload, MessageHeaders headers) {
    if (!(payload instanceof Serializable)) {
        throw new IllegalArgumentException("Can't convert payload, it must be of type Serializable");
    }//from w w  w . ja  va2  s . co  m

    ByteArrayOutputStream content = new ByteArrayOutputStream();
    Base64OutputStream base64OutputStream = new Base64OutputStream(content, true, 0, null);
    ObjectOutputStream objectOutputStream = null;
    try {
        objectOutputStream = new ObjectOutputStream(base64OutputStream);
        objectOutputStream.writeObject(payload);
        objectOutputStream.flush();
    } catch (IOException e) {
        throw new MessageConversionException("Error converting payload into binary representation", e);
    } finally {
        if (objectOutputStream != null) {
            try {
                objectOutputStream.close();
            } catch (IOException e) {
                LOGGER.warn("Error closing object output stream while writing message payload", e);
            }
        }
    }

    return new String(content.toByteArray(), 0, content.size(), this.encoding);
}

From source file:org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.java

/**
 * Invoke the handler, wrapping any exception to a {@link ListenerExecutionFailedException}
 * with a dedicated error message./*from   w  w w.j  a v  a 2  s .  c om*/
 * @param data the data to process during invocation.
 * @param acknowledgment the acknowledgment to use if any.
 * @param message the message to process.
 * @return the result of invocation.
 */
protected final Object invokeHandler(Object data, Acknowledgment acknowledgment, Message<?> message) {
    try {
        if (data instanceof List && !this.isConsumerRecordList) {
            return this.handlerMethod.invoke(message, acknowledgment);
        } else {
            return this.handlerMethod.invoke(message, data, acknowledgment);
        }
    } catch (org.springframework.messaging.converter.MessageConversionException ex) {
        throw new ListenerExecutionFailedException(createMessagingErrorMessage(
                "Listener method could not " + "be invoked with the incoming message", message.getPayload()),
                new MessageConversionException("Cannot handle message", ex));
    } catch (MessagingException ex) {
        throw new ListenerExecutionFailedException(createMessagingErrorMessage(
                "Listener method could not " + "be invoked with the incoming message", message.getPayload()),
                ex);
    } catch (Exception ex) {
        throw new ListenerExecutionFailedException("Listener method '"
                + this.handlerMethod.getMethodAsString(message.getPayload()) + "' threw exception", ex);
    }
}