I have a simple Java RESTful API endpoint which lets Jersey handle the marshalling.
When accept=application/json
it works fine and returns expected.
When accept=application/xml
it returns 500 server error
In what cases would marshalling work for json but not xml, am I missing something ?
Here's my code:
Resource method:
@GET
@Path("/client/{clientId}/technicalrep")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@WebinarSecurityFilter
@WebinarClientValidationFilter
public Response getTechnicalRepContacts(@PathParam("clientId") Long clientId, @HeaderParam("accept") String accept){
if (isAcceptInvalid(accept)) {
return Response.status(Response.Status.PRECONDITION_FAILED).entity(new PlatformApiMessage().withMessage("The header parameter Accept is mandatory")).build();
}
List<ClientTechnicalContact> technicalContacs = wccClientService.findClientTechnicalContactsByClientId(clientId);
if (technicalContacs == null || technicalContacs.size() == 0) {
return Response.ok(new PlatformApiMessage().withMessage("No Technical Rep Contacts found.")).build();
} else {
ClientLevelTechnicalContacts clientLevelTechnicalContacts = new ClientLevelTechnicalContacts(clientId,technicalContacs);
return Response.ok(clientLevelTechnicalContacts).build();
}
}
DTO:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ClientLevelTechnicalContacts {
private long clientid;
@XmlElement(name = "technicalcontact")
private List<ClientTechnicalContact> technicalcontacts;
public ClientLevelTechnicalContacts(long clientid,List<ClientTechnicalContact> technicalcontacts) {
this.clientid = clientid;
this.technicalcontacts = technicalcontacts;
}
public long getClientid() {
return clientid;
}
public void setClientid(long clientid) {
this.clientid = clientid;
}
public List<ClientTechnicalContact> getTechnicalcontacts() {
return technicalcontacts;
}
public void setTechnicalcontacts(List<ClientTechnicalContact> technicalcontacts) {
this.technicalcontacts = technicalcontacts;
}
}
@XmlRootElement(name="technicalcontacts")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClientTechnicalContact {
private long contactid;
private String contactname;
public ClientTechnicalContact(){}
public ClientTechnicalContact(long contactid, String contactname) {
super();
this.contactid = contactid;
this.contactname = contactname;
}
public long getContactid() {
return contactid;
}
public void setContactid(long contactid) {
this.contactid = contactid;
}
public String getContactname() {
return contactname;
}
public void setContactname(String contactname) {
this.contactname = contactname;
}
}