Веб-сервис Джерси не обрабатывает XML, но JSON - PullRequest
0 голосов
/ 23 июня 2019

В настоящее время я работаю над веб-сервисом Jersey / Hibernate (в контейнере Tomcat 9), который также должен иметь возможность использовать и создавать JSON (application / json) и XML (application / xml). Он поддерживает GET и POST для использования этих типов. DELETE поддерживается и работает, а также GET и POST для JSON. Но как только я пытаюсь сделать то же самое с типом содержимого XML, я получаю Внутреннюю ошибку сервера 500.

Структура выглядит следующим образом: (проверьте код ниже) Список песен (класс Songlist) содержит список песен и владельца (класс пользователя).

Вы можете получить песню в / (myWSname) / songs / {id} в XML и опубликовать ее без проблем.

Я предполагаю, что проблема здесь в аннотациях XML, потому что для JSON все работает так, как сейчас. Я пытался добавить @XmlElement и @AccessorType (FIELD). Ничего из этого не помогло. Кроме того, все хорошо работает для песен в /(myWSname)/songs/ enjid‹.

    @Entity
    @Table(name="songlists")
    @XmlRootElement(name = "songList")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Songlist {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonProperty(value = "id")
    @XmlElement
    private int id;

    @JsonProperty("name")
    @XmlElement
    private String name;

    @ManyToOne
    @JsonProperty("owner")
    @JoinColumn(name = "owner_id")
    @XmlElement
    private User owner = null;

    @JsonProperty("isPrivate")
    @XmlElement
    private boolean isPrivate;


    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "songlists_songs", joinColumns = {    @JoinColumn(name = "list_id") }, inverseJoinColumns = {
            @JoinColumn(name = "song_id") })
    @XmlElementWrapper(name = "songs")
    @XmlElement(name = "song")
    @JsonProperty(value = "songs")
    private List<Song> songs = null;


    //JAXB no arg constructor 
    public Songlist() {
    }

    // Here: other constructors
    // and Getters and Setters for all fields 


    }```


@Entity
@XmlRootElement(name = "song")
@XmlAccessorType(XmlAccessType.FIELD)
@Table(name="songs")
public class Song {

@Id
@Column(name="song_id")
@JsonProperty("id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@XmlAttribute (name = "id")
private Integer id;

@NotNull
@JsonProperty("title")
@XmlAttribute (name = "title")
private String title;

@JsonProperty("artist")
@XmlAttribute (name = "artist")
private String artist;


@JsonProperty("album")
@XmlAttribute (name = "album")
private String album;


@JsonProperty("released")
@XmlAttribute (name = "released")
private Integer released;

@JsonIgnore
@XmlTransient
@ManyToMany(fetch = FetchType.EAGER, mappedBy="songs")
private List<Songlist> songlists;

//JAXB no arg constructor
public Song() {
}

// here: some other constructors
// and Getters and Setters for all fields

} `` `

К сожалению, для этого нет сообщений журнала. Судя по моим исследованиям, очевидно, это проблема JAXB.

1 Ответ

0 голосов
/ 26 июня 2019

Решением было сделать поле songfest в классе User (который я не опубликовал, потому что я не ожидал, что это будет источником ошибки) XML-переходный процесс, так как это будет ссылаться на список песен, а список песен будет ссылаться на пользователя , Бесконечный цикл, по-видимому.

...