Hallo liebe Forengemeinde,
ich hänge hier schon seit 2 Tagen an einem Problem, dessen Ursache für mich im Dunklen liegt.
Ich versuche einen REST-Service mit Glassfish 4.1 und Jersey 2.10.4 mit Jackson als JSON-Mapper zu bauen, dieser jedoch lässt nur GET und DELETE-Anfragen zu, POST und PUT wird mit 400 - Bad Request ohne irgendwelche Loggings im Server-Log zurückgewiesen und die entsprechend annotierten Methoden werden garnicht erst ausgeführt.
Es läuft auch ein CrossOriginFilter extends ContainerResponseFilter bei jeder GET und DELETE-Anfrage, bei PUT und PUSH wird dieser jedoch nicht ausgeführt.
Ich habe folgende Maven-Konfiguration:
[XML]
javax.ws.rs
javax.ws.rs-api
2.0.1
provided
org.glassfish.jersey.media
jersey-media-json-jackson
2.10.4
javax
javaee-web-api
7.0
provided
[/XML]
Außerdem sieht meine web.xml folgendermaßen aus:
[XML]
BASIC
MyAuthRealm
secure
secure
/*
GET
PUT
POST
DELETE
USER_ROLE
ADMINISTRATOR_ROLE
EDITOR_ROLE
DELETE_ROLE
ADMINISTRATOR_ROLE
USER_ROLE
EDITOR_ROLE
DELETE_ROLE
[/XML]
Mit der Konfiguration der gesamten Security-Einstellungen befasse ich mich später, da meine EJB (in einer anderen .jar-Datei) mit @RolesAllowed-Annotationen arbeiten und ich ohne diese web.xml immer eine EJBAccesException bekomme (auch wenn der Client sich authentifiziert.
Ich habe außerdem noch folgende ApplicationConfig-Klasse:
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<>();
resources.add(my.package.CrossOriginFilter.class);
resources.add(JacksonFeature.class);
resources.add(LoggingFilter.class);
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
//Alle ExceptionMapper und REST-Klassen werden hinzugefuegt
}
}```
Soviel zur Grundstruktur, jetzt meine REST-Klasse, die wie alle anderen meiner REST-Klassen (alle ähnlich aufgebaut), alle GET und DELETE-Operationen ausführt, jedoch alle Methoden, die mit @Post oder @Put annotiert sind, gar nicht ausführt, also ignoriert):
Hinweis: Die Vater-Klasse AbstractFacade ist zur Zeit noch funktionslos!
```//Workaround for Bug https://java.net/jira/browse/GLASSFISH-21114
@RequestScoped
@Path("town/")
public class TownFacadeREST extends AbstractFacade<Town> implements Serializable {
//Variablen und Konstruktor
@POST
@Consumes({"application/xml"})
public void create(TownTO entity) throws FMBusinessException {
//Wird garnicht erst ausgeführt!
}
@PUT
@Path("{id}")
@Consumes({"application/json"})
@Produces({"application/json"})
public TownTO edit(@PathParam("id") Long id, TownTO entity) throws FMBusinessException {
//Wird garnicht erst ausgeführt!
}
@DELETE
@Path("{id}")
public void remove(@PathParam("id") Long id) throws FMBusinessException {
//Löschen funktioniert problemlos
}
@GET
@Path("{id}")
@Produces({"application/json"})
public TownTO find(@PathParam("id") Long id) throws FMEntityNotFoundException {
//Finden funktioniert problemlos
}
@GET
@Produces({"application/json"})
public List<TownTO> findAll() throws FMBusinessException {
//Alle finden funktioniert problemlos
}
}```
```@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class TownTO implements Serializable {
private Long id;
private String name;
private String postalCode;
public TownTO() {
System.out.println("TownTO creation");
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getPostalCode() {
return postalCode;
}
}```
Ich hoffe, ich habe alle Informationen mit reingepackt und hoffe außerdem, dass mir jemand hierbei aushelfen kann, denn ich bin wirklich mit allem am Ende (verschiedene web.xml-Konfigurationen durchgegangen, usw.)
Schönen Gruß,
Philipp