MessageBodyWriter nicht gefunden für media type={application/xml, q=1000} - Trikot + Jaxb
Schreibe ich ein RESTful web service mit Jersey. Ich will zurück ein benutzerdefiniertes Objekt, das in XML-form an die Verbraucher. Die Fehler ich erhalte, ist:
MessageBodyWriter nicht gefunden für media type={application/xml, q=1000}, type=class com.test.ws.Mitarbeiter, genericType=class com.test.ws.Mitarbeiter.
Unten ist der code:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>com.vogella.jersey.first</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Register resources and providers under com.vogella.jersey.first package. -->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.ws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Service-Klasse
package com.test.ws;
@Path("/hello")
public class Hello {
@GET
@Path("/sayHello")
@Produces(MediaType.APPLICATION_XML)
public Employee sayHello() {
Employee employee = new Employee();
employee.setEmpId(1);
employee.setFirstName("Aniket");
employee.setLastName("Khadke");
return employee;
}
}
Employee.java
package com.test.ws;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "employee")
public class Employee {
public String firstName;
public String lastName;
public int empId;
public Employee(String firstName, String lastName, int empId) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.empId = empId;
}
public Employee() {
super();
}
@XmlElement
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@XmlElement
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
}
Und hier ist die Liste der Bibliotheken Hinzugefügt:
Kann mir jemand helfen?
- fügen Sie implementiert Serializable, um die Mitarbeiter-Klasse
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dein Fehler ist in der web.xml. Versuchen Sie, Ihren Teil zu diesem in Ihrem web.xml.
Einen Weg, um Ihr Problem zu lösen, ist das erstellen eines benutzerdefinierten
javax.ws.rs.core.Application
oderorg.glassfish.jersey.server.ResourceConfig
. Es scheint, dass Ihre server nicht erkennt, dass Ihr Provider für die Serialisierung. Durch die Umsetzung Ihrer eigenenApplication
können Sie angeben, welche provider Sie verwenden möchten. für Ihr Beispiel, was Sie getan haben könnte ist :MyApplication.java
Und fügen Sie die Anwendung in Ihrer Implementierung Datei :
web.xml
Mitarbeiter-Klasse implementiert Serializable interface
War ich in der Lage, das Problem zu beheben ich. Dies war, weil er widersprüchliche Gläser enthalten im build-Pfad. Hier ist der snap für jar-Dateien.
Ich verwalten ein legacy-Projekt, die ich brauchte, um hinzuzufügen eine REST-web-service. Dies nicht Maven.
Für jersey 2.25, die letzten kompiliert mit Java SDK 1.7, löste ich hinzufügen jar
jersey-media-jaxb-2.25.jar