Внутренняя ОШИБКА 500 на стороне клиента Rest API от Сервера (?): Java с импортированным ядром Джексона, аннотациями и привязкой данных - PullRequest
0 голосов
/ 04 апреля 2020

В настоящее время я пытаюсь создать службу базы данных (сервер) для автосалона (клиент). Но в настоящее время я застрял с ошибкой с сервера -> ошибка ниже (консоль клиентского приложения).

Я хочу узнать, как отлаживать ошибки, подобные возвращаемым с сервера (REST). Так как я не знаю, как отладить возвращенную ошибку, чтобы знать, где именно проблема (сервер, где именно? Я не знаю), чтобы решить ее.

Я сделал предположение (из ошибки), что она имеет чтобы сделать так, как я читаю (getCar (String name)) возвращенный jsonArray с сервера.

Я в данный момент работаю (IDE Netbeans 8.2). Сервер использует glassfi sh 4.1.1 для развертывания клиентского доступа на моем локальном компьютере (клиент (обычное приложение Java) на моем локальном компьютере).

Exception in thread "main" javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:929)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770)
at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296)
at carclient.Client.getByModel(Client.java:57)
at carclient.CarClient.readCar(CarClient.java:56)
at carclient.CarClient.main(CarClient.java:36)

C : \ Users \ user \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run. xml: 53: Java возвращено: 1 BUILD FAILED (общее время: 1 секунда)

I получить ошибку в строке 56 в моем коде, где я использую метод getByModel (модель String) с сервера, внутри другого метода readCar на моем клиенте.

Метод readCar принимает строку в качестве входных данных для получения JsonArray возвращается с сервера с помощью метода getByModel. В методе readCar я считал JsonArray в виде строки, используя функцию ObjectMapper .readValue (returnType, input). Мой план состоял в том, чтобы использовать это строковое значение JsonArray для создания автомобилей Car [] (POJO). К сожалению, это, похоже, не работает, и я не знаю, является ли это мой клиент (способ чтения возвращаемого значения) или это мой сервер (что бы это ни было).

Основной код клиента:

package carclient;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;


public class CarClient {
    Client client; //client class created from Jersey REST client generated for REST resource:CarDatabase [generic](Server file)

    public CarClient(Client client) {
        this.client = client;
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
       CarClient client =  new CarClient(new Client());
       Car car  =  new Car("test", "test", "test", 1, "test"); 
       client.add(car);
       client.add(new Car("test", "test", "test", 1, "test"));


       client.readCar("test");

    }



   public void add(Car e){
       ObjectMapper mapper;
       try{
           mapper = new ObjectMapper();
           String json = mapper.writeValueAsString(e);
           this.client.addCar(json);
       }catch(IOException ex){
           Logger.getLogger(CarClient.class.getName()).log(Level.SEVERE, "failed to add Car", ex);
       }
   }

   public void readCar(String carModel){
       Car[] cars= null;

        String value = this.client.getCarByModel(String.class, carModel);

        try {

            cars = new ObjectMapper().readValue(value, Car[].class);

        } catch (IOException e) {
            e.printStackTrace();
        }
   }

Серверный код (другие методы, такие как add (работает? Хорошо, по крайней мере, он компилируется (только если я знал, как отлаживать сервер от клиента:>)) и delete (еще не проверял, так как он дает мне ошибку в файле конфигурации клиента ОШИБКА: не найден подходящий метод для удаления.) опущен):

    @GET
    @Path("{model}")
    @Produces(MediaType.APPLICATION_JSON)
    @Override
    public JsonArray getByModel(@PathParam("model") String model) {
        String result = "";
        ArrayList<Car> cars = new ArrayList<>(); 
        JsonArray array = null;
        ObjectMapper map = new ObjectMapper();

        this.databaseData.forEach(car-> {
            if(car.getModel().equalsIgnoreCase(model)){
                 result +=  car.getModel()    // for test for now. if its the actual model.
                           + " [ Name: "
                           + car.getName()
                           + ", Manufacture: "
                           + car.Manufacture()
                           + " ]";
                 car.setResult(result);
                 result = ""; //resets it for each car that matches the model.
                 data.add(car); 
            }       
        });

        try {
            String value = mapper.writeValueAsString(cars);
            JsonReader reader = Json.createReader(new StringReader(value));
            array = reader.readArray();
        } catch (JsonProcessingException e) {
            Logger.getLogger(CarDatabase.class.getName()).log(Level.WARNING, "failed to get car", e);
        } 

           return array;

Класс автомобиля (присутствует в клиентском и серверном пакетах):

package carclient;

public class Car {
   private String name;
   private String model;
   private String manufacture;
   private int price;
   private String yearMade;
   private String message = "";

   public Car(){
       //empty constructor
   }

    public Car(String name, String model, String manufacture, int price, String yearMade) {
        this.name = name;
        this.model = model;
        this.manufacture =  manufacture;
        this.price= price;
        this.yearMade = yearMade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getModel() {
        return country;
    }

    public void setModel(String country) {
        this.country = country;
    }

    public String getManufacture() {
        return manufacture;
    }

    public void setManufacture(String range) {
        this.manufacture = manufacture;
    }

    public int getPrice() {
        return price;
    }

    public void setHeight(int price) {
        this.price = price;
    }

    public String getYearMade() {
        return yearMade;
    }

    public void setYearMade(String yearMade) {
        this.yearMade = yearMade;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }

    @Override
    public String toString() {
        return "Car{" + " name= " + name 
                + ", model = " + model
                + ", manufacture= " + manufacture
                + ", price = " + price
                + ", yearMade = " + yearMade + '}';
    }

СПАСИБО ЗАБЛАГОВРЕМЕННО. ТЫ ЖИЗНЕННЫЙ СПАСАТЕЛЬ, КОТОРЫЙ Я БЫЛ НА ЭТОМ ДЛИННЫМ:> ТАКЖЕ Я НЕКОТОРЫЙ ЧУЖОЙ IE, ЧТОБЫ ПОЛУЧИТЬ ЭТО, КАК С JAVA ТАК БЛАГОДАРИМ ЗА ПАЦИЕНТУ.

...