www.state-it.info

Gran base de respuestas a las preguntas de los desarrolladores
Header decor

¿por Qué el servidor da 500-ku cuando intento tirar de la entrada a través de la api de REST de id?

SlandShow 2018-10-13 14:19:16

tengo una aplicación A en Tomcat, la aplicación B en WildFly. La tarea es: anexo A tiene tres REST-controlador, que:

  1. Dan una lista de todos los horarios en el día de hoy
  2. Emiten una programación específica de id
  3. Dan una lista de todas las estaciones


Cuando ejecuto ambas aplicaciones, la aplicación B saca primero la lista de todos los horarios de los trenes en el día de hoy.

Pero ahora considere este use-case. En el anexo A cambia el horario (se agrega una nueva entrada). A envia un mensaje a través de un intermediario (RabbitMQ) B. La aplicación B recibe el mensaje y tratando de sacar una nueva programación a través de REST-controlador de la primera aplicación de id-шнику. Y aquí es aquí donde se producen los problemas.

Vamos a ver primero mostraré el código de la propia REST-controlador:
@RestController
public class BoardScheduleController {

    private static final Logger LOGGER = Logger.getLogger(BoardScheduleController.class);

    @Autowired
    ScheduleService scheduleService;

    @Autowired
    StationService stationService;

    @GetMapping("/api/board/schedule/today")
    public ResponseEntity<?> getSchedulesForToday() {
        List<ScheduleDTO> schedules = null;
        try {
            schedules = scheduleService.getAllForToday();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        LOGGER.info("RETRIEVED " + schedules.size() + " RECORDS");
        return ResponseEntity.ok(schedules);
    }

    @GetMapping("/api/board/stations")
    public ResponseEntity<?> getStationList() {
        List<StationDTO> stations = stationService.getAll();

        LOGGER.info("RETRIEVED " + stations.size() + " RECORDS");
        return ResponseEntity.ok(stations);
    }

    @GetMapping("/api/board/schedule/{id}")
    public ResponseEntity<?> getScheduleById(@PathVariable Long id) {
        ScheduleDTO schedule = scheduleService.getByIdScheduleDTO(id);
        LOGGER.info("DTO: " + schedule.getStationDepartureName() + " -> " + schedule.getStationArrivalName() + " (" + schedule.getDateDeparture() + " --> " + schedule.getDateArrival() + ")");
        LOGGER.info("RETRIEVED " + schedule + " SCHEDULER");
        return ResponseEntity.ok(schedule);
    }

}


Así, cuando en service-capa la primera aplicación, se envía un mensaje que indica que hay un cambio en el horario (crear nuevo). A continuación, cuando es correctamente el mensaje leeListener, la segunda aplicación tratando de sacar el significado de id (id de la nueva entrada me pasa en el cuerpo del mensaje, en forma de cadena).

En el registro se ve que se lee:
INFO    2018-10-12 22:49:33,799 [pool-9-thread-4] com.slandshow.helpers.Listener  -  [x] Received 'create id=46'
INFO    2018-10-12 22:49:33,800 [pool-9-thread-4] com.slandshow.helpers.Listener  - create id=46


Ahora tratando de sacar esta entrada a través de la api de REST de id = 46:
public Schedule getById(Long id) {
        String response = getResultResponse(Utils.URL_SCHEDULE_BY_ID + id);
        Schedule schedule = null;
        try {
            log.info(response);
            schedule = objectMapper.readValue(response, new TypeReference<Schedule>() {
            });
        } catch (IOException e) {
            log.error("ERROR, CAN'T LOAD SCHEDULE BY ID " + e.getMessage());
        }
        return schedule;
    }

    ...
  // Внутри класса Loader использую эту функцию для того, чтобы вытащить JSON по REST'у
   private String getResultResponse(String URL) {
        WebResource webResource = client.resource(URL);
        return webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class).getEntity(String.class);
    }


Bueno, sí, dentro de la segunda aplicación se utiliza la Schedule балванка:
public class Schedule implements Serializable {

    private Long id;

    private String dateDeparture;

    private String dateArrival;

    private String trainName;

    private String stationDepartureName;

    private String stationArrivalName;

    private Integer price;

    /* Getters & setters */
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getDateDeparture() { return dateDeparture; }
    public void setDateDeparture(String dateDeparture) { this.dateDeparture = dateDeparture; }

    public String getDateArrival() { return dateArrival; }
    public void setDateArrival(String dateArrival) { this.dateArrival = dateArrival; }

    public String getTrainName() { return trainName; }
    public void setTrainName(String train) { this.trainName = trainName; }

    public String getStationDepartureName() { return stationDepartureName; }
    public void setStationDepartureName(String stationDeparture) { this.stationDepartureName = stationDeparture; }

    public String getStationArrivalName() { return stationArrivalName; }
    public void setStationArrival(String stationArrival) { this.stationArrivalName = stationArrival; }

    public Integer getPrice() {
        return price;
    }
    public void setPrice(Integer price) {
        this.price = price;
    }
}


Así, cuando se ретривинг de datos a través de REST, me sale реквестом 500-ku. Más bien, me sale la representación de cadena de página 500-oh, donde dice esto:
java.lang.IllegalArgumentException: source cannot be null


No entiendo que no es así? REST-el controlador debe funcionar correctamente, ya que la lista de los trenes y los horarios se envía, y por id no se puede encontrar de forma manual probado y se devuelve realmente válido JSON).

dimonchik2013 2018-10-13 14:35:20

es decir, el source no es null y se escribe null ?

cuando este en el esquema de rabbitamq inseguro con la entrega de

aún que ?

P. S. se ve que un poco de código


SlandShow 2018-10-13 14:42:04

dimonchik2013, el mensaje se envía a través de un intermediario, con este no hay problema. He aquí el problema de la REST surgen


dimonchik2013 2018-10-13 14:47:23

bueno, depuración y pruebas, y cómo todavía?


SlandShow 2018-10-13 14:52:06

dimonchik2013, en un proyecto de mucho código, puedo acaso que el enlace a гитхаб Usted tirar


xmoonlight 2018-10-13 15:04:40

SlandShow, completo traza el error necesita


SlandShow 2018-10-13 15:32:52

xmoonlight, el express es aqu https://jsfiddle.net/zp1ob67j/


xmoonlight 2018-10-13 17:04:49

SlandShow, como opción, un error aquí:
Utils.URL_SCHEDULE_BY_ID
trate de sustituir a:
java.util.URL_SCHEDULE_BY_ID


Total answers: 1

profesor08 2018-10-13 16:22:58

Si 500, significa que el servidor produjo un error inesperado, lanzó la excepción. Así mira aquí donde se produce el fenómeno y ver por qué.
El código anterior es inútil, aquí no hay ningún código, donde sale una excepción. En el loge de ti porque, masticada, donde el error y qué tipo de error. Averigua por qué allí vienen los datos y de donde son ellos vienen.

Preguntas relacionadas:

Footer decor

© www.state-it.info | Base of answers to questions for developers and programmers.