Аннотация Jaxb, «внутренняя ошибка 500» при GET, даже если структура компонента технически правильна - PullRequest
0 голосов
/ 11 июля 2020

Проблема в том, что если я попытаюсь выполнить POST, все будет нормально. Если я попытаюсь выполнить GET экземпляра, сервер выдаст мне «внутреннюю ошибку 500».

Это часть beans:

-Peer-

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="peer")
public class Peer {

    private int id;
    private String address;
    private int port;

    public Peer(){  }

    public Peer (int id, String address, int port){
        this.id = id;
        this.address = address;
        this.port = port;
    }

    //under here basic getters and setters..
}

-ListOfPeers-

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement (name = "listofpeers")
public class ListOfPeers {

    @XmlElement(name="peer")
    private List<Peer> peersList;

    private static ListOfPeers instance;

    private ListOfPeers(){
        peersList= new ArrayList<Peer>();
    }

    //singleton
    public synchronized static ListOfPeers getInstance(){
        if(instance==null)
            instance = new ListOfPeers();
        return instance;
    }

    public synchronized List<Peer> getPeersList() {

        return new ArrayList<>(peersList);
    }

    public synchronized void setPeersList(List<Peer> peersList) {
        this.peersList = peersList;
    }

    public synchronized int addPeerToList(Peer peer) {
        for(Peer currentPeer : ListOfPeers.getInstance().peersList) {
            if(currentPeer.getId()==peer.getId()) return -1;
        }
        ListOfPeers.getInstance().peersList.add(peer);
        return  ListOfPeers.getInstance().peersList.size();
    }
}

И это услуги:

import javax.ws.rs.*;
import javax.ws.rs.core.Response;

@Path("/services")
public class Services {

    @GET
    @Path("/getpeers")
    @Produces("application/xml")
    public Response getPeers() {
        return Response.ok(ListOfPeers.getInstance()).build();
    }

    @POST
    @Path("/addpeer")
    @Consumes("application/xml")
    public Response addPeer(Peer peer) {
        int response = ListOfPeers.getInstance().addPeerToList(peer);
        if(response < 0){
            return Response.status(400, "Invalid ID: "+ peer.getId() + " is already in use.").build();
        }
        else return Response.status(200, String.valueOf(response)).build();
    }

Надеюсь, я дал достаточно контекста, это мой первый вопрос, поэтому я не знаю, отсутствует то, что может понадобиться.

...