ich will auf einem Oracle Weblogic Server ein Webservice aufbauen, um auf verschiedenen EJB über Android darauf zuzugreifen. Ich habe in diesem Gebiet leider fast gar keine Ahnung…
Habt ihr paar hilfreiche Seiten über das Thema WebService und Tutorials wie man ein WebService auf einem Oracle Weblogic Server aufbaut um auf EJB zuzugreifen?
Danke.
Bin mir nicht sicher ob ich das Thema in das Java EE Unterforum hätte schreiben sollen oder doch hier, weil ich über eine Android App auf das Webservice zugreifen möchte…
Ja, die gibt es. Generell sollte man lieber SOAP bzw. JAX-WS verwenden wenn man bestimmte Sicherheitsanforderungen hat die Signaturen oder Verschlüsselungen notwendig machen. Das ist mit WS-Security deutlich granulierter einstellbar als bei simplen HTTP-Endpunkten. Allerdings ist SOAP generell mehr Text bei gleicher Info, deshalb können REST-Services hier etwas gut machen was die übertragene Datenmenge angeht. Spielt gerade bei mobilen Geräten schon eine nicht zu vernachlässigende Rolle.
Das ist in dem Fall allerdings nicht wichtig da ja Client und Server aus der selben Schmiede kommen.
Habe jetzt ein Web Service mit REST und JAX-RS aufgebaut, was mit einer einfachen Ausgabe im Browser funktioniert.
Jetzt kommt der nächste schwierigere Schritt, und zwar habe ich viele verschiedene Beans die ich dann über den Client aufrufen möchte.
Wie kann ich jetzt im WebService die einzelnen Beans angeben, damit ich die vom Client aus benutzen kann?
Ist hier eigentlich ganz gut beschrieben.
Wichtig ist, dass die die Beans sich im @Stateless - State befinden, um die Dependency Injection zu ermöglichen
<05.02.2014 17:01 Uhr MEZ> <Servlet: „JAX-RS Servlet“ failed to preload on startup in Web application: „EclipseJAX-RS“.
java.lang.NoClassDefFoundError: Lxx/xxxxxx/xxx/xxx.xxx/MessdatenShowBean;
Ressource-Klasse:
import javax.ejb.EJB;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import xx.xxxxxx.xxx.xxx.xxx.MessdatenShowBean;
@Path("/helloworld")
public class HelloWorldResource {
@EJB
MessdatenShowBean messdaten;
@GET
@Path("/getMessdatenShowBean")
public MessdatenShowBean getMessdaten() {
return messdaten;
}
}```
Kann es daran liegen, dass die Bean in einem anderem Projekt liegt?
Dann wird die Klasse nicht gefunden. Ist denn die Definition im WAR/EAR-File drinnen? Vielleicht ist etwas im Build-Prozess kaputt. Eclipse selbst hat ja wieder eine eigene Build-Path-Config.
Hört sich fast so an, als ob deine Annotationen nicht korrekt sind. Hast du die Parameter so wie von Tomate_Salat vorgeschlagen angegeben?
[QUOTE=Tomate_Salat;85514]Lass dir die Beans in deinen Webservice injezieren:
public String getGreet(@PathParam("name") String name) {
return greetingService.doGreet(name);
}
```[/QUOTE]
[QUOTE=Kokscola;85535]
Kann es daran liegen, dass die Bean in einem anderem Projekt liegt?[/QUOTE]
Was genau meinst du mit "in einem anderen Projekt"? Über eine Library hinzugefügt?
Die Bean sollte natürlich schon direkt beim WebService liegen, wobei die Funktionalitäts- Klassen wiederum über eine Library eingebunden werden können.
Annotationen wurden so wie die von Tomate_Salat vorgeschlagen angegeben. Ausser die @PathParam habe ich nicht, da ich keine Parameter im getter benutze.
[QUOTE=Brixto;85762]
Was genau meinst du mit „in einem anderen Projekt“? Über eine Library hinzugefügt?
Die Bean sollte natürlich schon direkt beim WebService liegen, wobei die Funktionalitäts- Klassen wiederum über eine Library eingebunden werden können.[/QUOTE]
Ja, die Bean liegt nicht in dem WebService sondern „in einem anderen Projekt“… Das Projekt, indem die Bean liegt, füge ich über den java build path in den WebService hinzu.
es wird immer ganz gern vergessen, eine beans.xml mit in das jeweilige Package zu legen… ansonsten werden die EJB und CDI Komponenten nicht im Conatiner (dein Weblogic zB.) registriert.
Suche mal nach beans.xml für JavaEE6 oder 7.
viele Grüße
Steven
Achso, gucke dir doch mal spring.io (Spring Boot) an…
Einfacher gehts nicht und ist für sowas ein super und leicht zu beherschendes Framework, wenn es nicht unbedingt ein Weblogic oder Glassfish sein muss.