0

When we're accessing a URI, for exemple localhost:8080/QuizProject/webapi/questions, we receive a 500 Internal Server Error.
There is no specific error message and the database receives and gets the information, we know this due to System.out.println.

Two methods for retrieving either all questions or a specific one using an id.

@Path("/questions")
public class QuestionResource {

    private QuestionService questionService = new QuestionService();

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Question> getAllQuestions()
{
    return questionService.getAllQuestions();
}

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{questionId}")
public Question getQuestion(@PathParam("questionId") int id)
    {
        return questionService.getQuestion(id);
    }
}

Class using hibernate-methods

package home.neshoz.Quiz222.services;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import home.neshoz.Quiz222.HibernateTools.HibernateUtil;
import home.neshoz.Quiz222.model.Answer;
import home.neshoz.Quiz222.model.Question;

public class QuestionService
{
    private SessionFactory sessionFactory;
    private Session session;

public List<Question> getAllQuestions()
{
    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    List<Question> questionList = session.createCriteria(Question.class).list();

    session.getTransaction().commit();

    return questionList;

}

public Question getQuestion(int id)
{
    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    Question question = (Question)session.get(Question.class, id);
    Collection<Answer> answerList = question.getAnswerList();
    for(Answer a : answerList)
    {
        System.out.println(a.getAnswer());
    }

    session.getTransaction().commit();
    session.close();

    return question;
}

public Question addQuestion(Question question)
{
    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    session.save(question);
    session.getTransaction().commit();
    session.close();

    return question;
}

public Question editQuestion(int id, String updatedQuestion)
{
    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    Question question = (Question)session.get(Question.class, id);
    question.setQuestion(updatedQuestion);

    session.update(question);
    session.getTransaction().commit();
    session.close();

    return question;
}

public Question deleteQuestion(int id)
{
    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    Question question = (Question)session.get(Question.class, id);

    session.delete(question);
    session.getTransaction().commit();
    session.close();

    return question;
}
}

Question Class

package home.neshoz.Quiz222.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@Entity
@Table(name = "Questions")
public class Question implements Serializable
{
    @Id
    @GeneratedValue
    @Column(name = "Id")
    private int id;

    private String question;

    @OneToMany(targetEntity = Answer.class, mappedBy = "question", cascade =   CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<Answer> answerList = new HashSet<Answer>();

    public Question()
    {

    }
    public Question(String question)
    {
        this.question = question;
    }
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getQuestion()
    {
        return question;
    }
    public void setQuestion(String question)
    {
        this.question = question;
    }
    public Set<Answer> getAnswerList()
    {
        return answerList;
    }
    public void setAnswerList(Set<Answer> answerList)
    {
        this.answerList = answerList;
    }
}

Answer-class

package home.neshoz.Quiz222.model;

import java.io.Serializable; 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Answers")
public class Answer implements Serializable
{
    @Id
    @GeneratedValue
    @Column(name = "Id")
    private int id;

    @Column(name = "Answer")
    private String answer;

    @Column(name = "correctAnswer")
    private String correctAnswer;

    @ManyToOne
    @JoinColumn(name = "Questions_Id")
    private Question question;

    public Answer()
    {

    }
    public Answer(String answer)
    {
        this.answer = answer;
    }

    public Question getQuestion()
    {
        return question;
    }

     public void setQuestion(Question question)
     {
        this.question = question;
    }

    public int getAnswerId()
    {
        return id;
    }
    public void setAnswerId(int answerId)
    {
        this.id = answerId;
    }
    public String getAnswer()
    {
        return answer;
    }
    public void setAnswer(String answer)
    {
        this.answer = answer;
    }
    public String getCorrectAnswer()
    {
        return correctAnswer;
    }
    public void setCorrectAnswer(String correctAnswer)
    {
        this.correctAnswer = correctAnswer;
    }
}

Main-class.

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import home.neshoz.Quiz222.HibernateTools.HibernateUtil;
import home.neshoz.Quiz222.model.Answer;
import home.neshoz.Quiz222.model.Question;

public class HibernateInsertDemo
{
    private static SessionFactory sessionFactory;
    private static Session session;

    public static void main(String[] args)
    {
        Question q = new Question("F1");

        Answer a1 = new Answer("A1");
        Answer a2 = new Answer("A2");

        q.getAnswerList().add(a1);
        q.getAnswerList().add(a2);

        a1.setQuestion(q);
        a2.setQuestion(q);

        sessionFactory = HibernateUtil.getSessionFactory();
        session = sessionFactory.openSession();
        session.beginTransaction();

        session.save(q);

        session.getTransaction().commit();
        session.close();
    }
}
agua from mars
  • 16,428
  • 4
  • 61
  • 70
Sl1m
  • 1
  • The package-names are outside of the class-code due to it being my first time posting on stackoverflow, sorry for the inconvenience! – Sl1m Mar 11 '16 at 13:46
  • `500 Internal Server Error` ... if you get something like this, you should add the stacktrace to the question. see: http://stackoverflow.com/help/how-to-ask – Meiko Rachimow Mar 27 '16 at 20:26
  • and the question was already asked: http://stackoverflow.com/questions/26659668/rest-jax-rs-exception-messagebodywriter-not-found – Meiko Rachimow Mar 27 '16 at 20:29

0 Answers0