Search in sources :

Example 1 with HttpMessageNotReadableException

use of cn.taketoday.http.converter.HttpMessageNotReadableException in project today-infrastructure by TAKETODAY.

the class AbstractWireFeedHttpMessageConverter method readInternal.

@Override
@SuppressWarnings("unchecked")
protected T readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
    WireFeedInput feedInput = new WireFeedInput();
    MediaType contentType = inputMessage.getHeaders().getContentType();
    Charset charset = contentType != null && contentType.getCharset() != null ? contentType.getCharset() : DEFAULT_CHARSET;
    try {
        InputStream inputStream = StreamUtils.nonClosing(inputMessage.getBody());
        Reader reader = new InputStreamReader(inputStream, charset);
        return (T) feedInput.build(reader);
    } catch (FeedException ex) {
        throw new HttpMessageNotReadableException("Could not read WireFeed: " + ex.getMessage(), ex, inputMessage);
    }
}
Also used : WireFeedInput(com.rometools.rome.io.WireFeedInput) HttpMessageNotReadableException(cn.taketoday.http.converter.HttpMessageNotReadableException) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) FeedException(com.rometools.rome.io.FeedException) MediaType(cn.taketoday.http.MediaType) Charset(java.nio.charset.Charset) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader)

Example 2 with HttpMessageNotReadableException

use of cn.taketoday.http.converter.HttpMessageNotReadableException in project today-framework by TAKETODAY.

the class ResponseEntityExceptionHandlerTests method httpMessageNotReadable.

@Test
@SuppressWarnings("deprecation")
public void httpMessageNotReadable() {
    Exception ex = new HttpMessageNotReadableException("message");
    testException(ex);
}
Also used : HttpMessageNotReadableException(cn.taketoday.http.converter.HttpMessageNotReadableException) MissingRequestPartException(cn.taketoday.web.bind.resolver.MissingRequestPartException) MissingPathVariableException(cn.taketoday.web.bind.MissingPathVariableException) ServletException(jakarta.servlet.ServletException) HttpRequestMethodNotSupportedException(cn.taketoday.web.HttpRequestMethodNotSupportedException) MissingRequestParameterException(cn.taketoday.web.bind.MissingRequestParameterException) RequestBindingException(cn.taketoday.web.bind.RequestBindingException) ConversionNotSupportedException(cn.taketoday.beans.ConversionNotSupportedException) HttpMessageNotReadableException(cn.taketoday.http.converter.HttpMessageNotReadableException) TypeMismatchException(cn.taketoday.beans.TypeMismatchException) HttpMediaTypeNotSupportedException(cn.taketoday.web.HttpMediaTypeNotSupportedException) HttpMediaTypeNotAcceptableException(cn.taketoday.web.HttpMediaTypeNotAcceptableException) BindException(cn.taketoday.validation.BindException) AsyncRequestTimeoutException(cn.taketoday.web.context.async.AsyncRequestTimeoutException) HttpMessageNotWritableException(cn.taketoday.http.converter.HttpMessageNotWritableException) MethodArgumentNotValidException(cn.taketoday.web.bind.MethodArgumentNotValidException) Test(org.junit.jupiter.api.Test)

Example 3 with HttpMessageNotReadableException

use of cn.taketoday.http.converter.HttpMessageNotReadableException in project today-framework by TAKETODAY.

the class AbstractWireFeedHttpMessageConverter method readInternal.

@Override
@SuppressWarnings("unchecked")
protected T readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
    WireFeedInput feedInput = new WireFeedInput();
    MediaType contentType = inputMessage.getHeaders().getContentType();
    Charset charset = contentType != null && contentType.getCharset() != null ? contentType.getCharset() : DEFAULT_CHARSET;
    try {
        InputStream inputStream = StreamUtils.nonClosing(inputMessage.getBody());
        Reader reader = new InputStreamReader(inputStream, charset);
        return (T) feedInput.build(reader);
    } catch (FeedException ex) {
        throw new HttpMessageNotReadableException("Could not read WireFeed: " + ex.getMessage(), ex, inputMessage);
    }
}
Also used : WireFeedInput(com.rometools.rome.io.WireFeedInput) HttpMessageNotReadableException(cn.taketoday.http.converter.HttpMessageNotReadableException) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) FeedException(com.rometools.rome.io.FeedException) MediaType(cn.taketoday.http.MediaType) Charset(java.nio.charset.Charset) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader)

Example 4 with HttpMessageNotReadableException

use of cn.taketoday.http.converter.HttpMessageNotReadableException in project today-framework by TAKETODAY.

the class AbstractMessageConverterParameterResolver method readWithMessageConverters.

/**
 * Create the method argument value of the expected parameter type by
 * reading from the given request.
 *
 * @param context the current request context
 * @param parameter the method parameter descriptor (may be {@code null})
 * @param targetType the target type, not necessarily the same as the method
 * parameter type, e.g. for {@code HttpEntity<String>}.
 * @return the created method argument value
 * @throws IOException if the reading from the request fails
 * @throws HttpMediaTypeNotSupportedException if no suitable message converter is found
 */
@Nullable
@SuppressWarnings("unchecked")
protected <T> Object readWithMessageConverters(RequestContext context, MethodParameter parameter, Type targetType) throws // 
IOException, // 
HttpMediaTypeNotSupportedException, // 
HttpMessageNotReadableException {
    MediaType contentType;
    boolean noContentType = false;
    try {
        contentType = context.requestHeaders().getContentType();
    } catch (InvalidMediaTypeException ex) {
        throw new HttpMediaTypeNotSupportedException(ex.getMessage());
    }
    if (contentType == null) {
        noContentType = true;
        contentType = MediaType.APPLICATION_OCTET_STREAM;
    }
    Class<?> contextClass = parameter.getContainingClass();
    Class<T> targetClass = targetType instanceof Class ? (Class<T>) targetType : null;
    if (targetClass == null) {
        ResolvableType resolvableType = ResolvableType.forMethodParameter(parameter);
        targetClass = (Class<T>) resolvableType.resolve();
    }
    Object body = NO_VALUE;
    EmptyBodyCheckingHttpInputMessage message = null;
    try {
        message = new EmptyBodyCheckingHttpInputMessage(context);
        RequestResponseBodyAdviceChain adviceChain = getAdvice();
        for (HttpMessageConverter<?> converter : this.messageConverters) {
            Class<HttpMessageConverter<?>> converterType = (Class<HttpMessageConverter<?>>) converter.getClass();
            GenericHttpMessageConverter<?> genericConverter = converter instanceof GenericHttpMessageConverter ? (GenericHttpMessageConverter<?>) converter : null;
            if (genericConverter != null ? genericConverter.canRead(targetType, contextClass, contentType) : targetClass != null && converter.canRead(targetClass, contentType)) {
                if (message.hasBody()) {
                    HttpInputMessage msgToUse = adviceChain.beforeBodyRead(message, parameter, targetType, converterType);
                    body = genericConverter != null ? genericConverter.read(targetType, contextClass, msgToUse) : ((HttpMessageConverter<T>) converter).read(targetClass, msgToUse);
                    body = adviceChain.afterBodyRead(body, msgToUse, parameter, targetType, converterType);
                } else {
                    body = adviceChain.handleEmptyBody(null, message, parameter, targetType, converterType);
                }
                break;
            }
        }
    } catch (IOException ex) {
        throw new HttpMessageNotReadableException("I/O error while reading input message", ex, context);
    } finally {
        if (message != null && message.hasBody()) {
            closeStreamIfNecessary(message.getBody());
        }
    }
    if (body == NO_VALUE) {
        HttpMethod httpMethod = context.getMethod();
        if (httpMethod == null || !SUPPORTED_METHODS.contains(httpMethod) || (noContentType && !message.hasBody())) {
            return null;
        }
        throw new HttpMediaTypeNotSupportedException(contentType, getSupportedMediaTypes(targetClass != null ? targetClass : Object.class));
    }
    MediaType selectedContentType = contentType;
    Object theBody = body;
    LogFormatUtils.traceDebug(log, traceOn -> {
        String formatted = LogFormatUtils.formatValue(theBody, !traceOn);
        return "Read \"" + selectedContentType + "\" to [" + formatted + "]";
    });
    return body;
}
Also used : HttpInputMessage(cn.taketoday.http.HttpInputMessage) IOException(java.io.IOException) HttpMediaTypeNotSupportedException(cn.taketoday.web.HttpMediaTypeNotSupportedException) HttpMessageNotReadableException(cn.taketoday.http.converter.HttpMessageNotReadableException) HttpMessageConverter(cn.taketoday.http.converter.HttpMessageConverter) GenericHttpMessageConverter(cn.taketoday.http.converter.GenericHttpMessageConverter) MediaType(cn.taketoday.http.MediaType) ResolvableType(cn.taketoday.core.ResolvableType) HttpMethod(cn.taketoday.http.HttpMethod) InvalidMediaTypeException(cn.taketoday.http.InvalidMediaTypeException) GenericHttpMessageConverter(cn.taketoday.http.converter.GenericHttpMessageConverter) Nullable(cn.taketoday.lang.Nullable)

Aggregations

HttpMessageNotReadableException (cn.taketoday.http.converter.HttpMessageNotReadableException)4 MediaType (cn.taketoday.http.MediaType)3 HttpMediaTypeNotSupportedException (cn.taketoday.web.HttpMediaTypeNotSupportedException)2 FeedException (com.rometools.rome.io.FeedException)2 WireFeedInput (com.rometools.rome.io.WireFeedInput)2 InputStream (java.io.InputStream)2 InputStreamReader (java.io.InputStreamReader)2 Reader (java.io.Reader)2 Charset (java.nio.charset.Charset)2 ConversionNotSupportedException (cn.taketoday.beans.ConversionNotSupportedException)1 TypeMismatchException (cn.taketoday.beans.TypeMismatchException)1 ResolvableType (cn.taketoday.core.ResolvableType)1 HttpInputMessage (cn.taketoday.http.HttpInputMessage)1 HttpMethod (cn.taketoday.http.HttpMethod)1 InvalidMediaTypeException (cn.taketoday.http.InvalidMediaTypeException)1 GenericHttpMessageConverter (cn.taketoday.http.converter.GenericHttpMessageConverter)1 HttpMessageConverter (cn.taketoday.http.converter.HttpMessageConverter)1 HttpMessageNotWritableException (cn.taketoday.http.converter.HttpMessageNotWritableException)1 Nullable (cn.taketoday.lang.Nullable)1 BindException (cn.taketoday.validation.BindException)1