Исключение во время выполнения не сериализуемо - PullRequest
0 голосов
/ 04 декабря 2018
SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path *** threw exception
[javax.ws.rs.ProcessingException: Error deserializing object from entity stream.] with root cause

Выше исключения, генерируемого в Jax-rs, когда я генерирую исключение времени выполнения.

У меня есть простая функция, которая выдает исключение во время выполнения.Я хочу сопоставить его с картографом исключения, но по какой-то странной причине выше исключение было брошено до моего исключения во время выполнения.Любая идея?

Вот класс, который имеет метод get телефона, с моим пользовательским исключением:

import java.util.Base64;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Lob;
import javax.persistence.Transient;
import javax.ws.rs.ProcessingException;
import java.lang.StackTraceElement;

import com.server.messit.errorhandling.exceptions.DataNotFoundException;
import com.server.messit.errorhandling.exceptions.IncorrectValueException;
import com.server.messit.errorhandling.handler.ErrorChecker;

/**
 * @author Prasad
 *
 */
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class User {
    @Id
    @Column(nullable = false, unique = true)
    private String phone;


    /**
     * @return the phone
     */
    public String getPhone() {
        return phone;
    }
    /**
     * @param phone the phone to set
     */
    public void setPhone(String phone) {
        if(!ErrorChecker.isValidPhoneNumber(phone)) {
            throw new DataNotFoundException("Incorrect Phone Number");
        } 
        this.phone = phone;
    }
}

Вот класс исключения:

public class DataNotFoundException extends RuntimeException {

    /**
     * 
     */
    private static final long serialVersionUID = -1422751876879336366L;

    public DataNotFoundException() {
        super();
    }

    public DataNotFoundException(String message) {
        super(message);
    }
}

Воткласс сопоставления исключений:

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.server.messit.errorhandling.handler.ErrorMessage;

/**
 * @author Prasad
 *
 */
@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException>{

    @Override
    public Response toResponse(DataNotFoundException exception) {
        ErrorMessage errorMessage = new ErrorMessage(exception.getMessage(), 404, "Doc");
        return Response.status(Status.NOT_FOUND).entity(errorMessage).build();
    }

}

Вот сгенерированное исключение:

Dec 04, 2018 5:52:51 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/MessItServer] threw exception [javax.ws.rs.ProcessingException: Error deserializing object from entity stream.] with root cause
com.server.messit.errorhandling.exceptions.DataNotFoundException: Incorrect Phone Number
    at com.server.messit.core.User.setPhone(User.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.yasson.internal.model.SetWithSetter.internalSetValue(SetWithSetter.java:27)
    at org.eclipse.yasson.internal.model.SetValueCommand.setValue(SetValueCommand.java:26)
    at org.eclipse.yasson.internal.model.ReflectionPropagation.setValue(ReflectionPropagation.java:67)
    at org.eclipse.yasson.internal.model.PropertyModel.setValue(PropertyModel.java:272)
    at org.eclipse.yasson.internal.serializer.ObjectDeserializer.lambda$getInstance$0(ObjectDeserializer.java:101)
    at java.util.LinkedHashMap.forEach(Unknown Source)
    at org.eclipse.yasson.internal.serializer.ObjectDeserializer.getInstance(ObjectDeserializer.java:95)
    at org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserialize(AbstractContainerDeserializer.java:62)
    at org.eclipse.yasson.internal.Unmarshaller.deserializeItem(Unmarshaller.java:57)
    at org.eclipse.yasson.internal.Unmarshaller.deserialize(Unmarshaller.java:50)
    at org.eclipse.yasson.internal.JsonBinding.deserialize(JsonBinding.java:45)
    at org.eclipse.yasson.internal.JsonBinding.fromJson(JsonBinding.java:85)
    at org.glassfish.jersey.jsonb.internal.JsonBindingProvider.readFrom(JsonBindingProvider.java:99)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:257)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:236)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:156)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:73)
    at org.gl

javax.ws.rs.ProcessingException исключение сгенерировано перед моим исключением, поэтому я не могу сопоставить свое исключение спользовательский ответ JSON.

1 Ответ

0 голосов
/ 04 декабря 2018

Я получил ответ.Я не должен бросать исключение в мой класс модели данных, то есть «Пользователь».Так что это дает мне ошибку сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...