Announcement

Collapse
No announcement yet.

WebService mit JEE5 (ohne NetbeansAssistenten) und JBoss 4.2

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WebService mit JEE5 (ohne NetbeansAssistenten) und JBoss 4.2

    ich möchte ein WebService bereitstellen und testen.
    Dabei bin ich nach einem Buch Java EE5, Thomas Stark Kapitel 13 vorgegangen.
    Hab leider dabei Probleme.

    An dieser Stelle müßte jetzt eigentlich der Satz kommen:
    "Wie aus meinen Fragen erkennbar ist, bin ich auf Beginner-Level was Web-Applications betrifft.
    Daher ersuche ich um Nachsicht oft trivialer oder falscher Fragen!"

    Meine Schritte:
    1) Erstelle in NetBeans das Projekt WS13 als Standard-Applikation (nicht als WEB -Applikation)
    2) Binde auch entsprechende Libs ein.
    3) Erstelle Klasse SoapService
    => kompiliert erfolgreich ohne Warnungen.

    --------------------------------
    package de.akdabas.javaee.ws;

    import javax.ejb.Stateless;
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import javax.xml.soap.SOAPMessage;

    @Stateless
    @WebService(name = "TestService")

    /**
    * Dieser Service nimmt eine SOAP-Nachricht entgegen, gibt Sie aus
    * und sendet die Nachricht anschließend wieder zurück
    */
    public class SoapService extends JAXMServlet {

    @WebMethod
    public SOAPMessage invoke(SOAPMessage message) {
    try {
    // Ausgabe der empfangen Nachricht auf der Kommandozeile
    message.writeTo(System.out);
    } catch (Exception exc) {
    exc.printStackTrace();
    }
    // Zurücksenden der Nachricht als Bestätigung
    return message;
    }
    }
    --------------------------------


    4) Und jetzt meine eigentlichen WEB-Probleme: Wie kann unter JBoss mein SoapService bereitstellen und testen?
    (da hab ich leider auch im Internet nichts gefunden)

    Meine Schritte laut dem Buch Java EE5:
    a) JBoss gestartet und ich kann im Browser mit http://localhost:8080 die Admin-Web-Seite sehen
    b) Ich hab ein build der 3 Java-Klassen erzeugt => dadurch wird eine WS13.jar Datei erzeugt (WS13, weil Projekt-Name WS13)
    c) Ich habe WS13.jar nach ..\JBoss\server\default\deploy kopiert
    d) und jetzt ??????
    d)Kann ich das Service in einem Browsertesten: Meine Versuche scheiterten:
    http://localhost:8080/WS13/SoapService
    http://localhost:8080/WS13/TestService
    usw.

    Unklar ist auch wo ich den name "TestService" verwende?!
    ************************************************** ************
    Habe auch einen Java Client verwendet (auch aus dem Java EE 5 BUCH).

    Meine Schritte:
    i) Im gleichen Projekt die Klasse SoapClient erzeugt
    ii) Entsprechende Libs eingebunden.

    Mein Problem: Wie kann ich mit dem SoapClient testen?

    Unter NetBeans auf Run liefert => java.lang.NullPointerException
    an der Stelle: SoapService ws = service.getPort(SoapService.class);

    In der Klasse SoapClient ist mir der Referenzverweis nicht klar:
    Wieso "http://java:8080/..." und nicht http://localhost:8080/..."
    ----------------------------------
    package de.akdabas.javaee.ws;

    import javax.xml.ws.Service;
    import javax.xml.ws.WebServiceRef;
    import javax.xml.soap.SOAPMessage;

    /**
    * Ein einfacher Client für eine SOAP Nachrichten
    */
    public class SoapClient {

    // Referenz auf den Webservice
    @WebServiceRef(
    wsdlLocation = "http://java:8080/kap13/SoapService?wsdl"
    )
    static Service service;

    /**
    * Diese Methode dient zum Testen der Methode 'doInvokeService()'
    */
    public static void main(String[] args) {
    SoapClient client = new SoapClient();
    client.doInvokeService();
    }

    /**
    * Erzeugt mit Hilfe des 'SoapMessageBuilder' eine neue SOAP
    * Nachricht, sendet diese an den 'SoapService' und gibt die
    * empfangene Antwort aus.
    */
    public void doInvokeService() {
    try {
    // Erstellen eines neuen Message Builders und Erzeugen
    // einer SOAP Nachricht
    SoapMessageBuilder msgBuilder = new SoapMessageBuilder();
    SOAPMessage message = msgBuilder.createMessage();

    // Referenzieren des Services
    SoapService ws = service.getPort(SoapService.class);

    // Sender der Nachricht und Empfang der Antwort
    SOAPMessage response = ws.invoke(message);

    // Ausgabe der Antwort-Nachricht
    response.writeTo(System.out);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    ----------------------------
    package de.akdabas.javaee.ws;

    import javax.xml.soap.*;

    /**
    * Diese Klasse demonstriert das Erzeugen einer SOAP-Nachricht mit
    * Hilfe der API 'javax.xml.soap'
    */
    public class SoapMessageBuilder {

    /**
    * Diese Methode dient zum Testen der Methode 'createMessage()'
    */
    public static void main(String[] args) throws Exception {
    SoapMessageBuilder smb = new SoapMessageBuilder();
    SOAPMessage message = smb.createMessage();
    message.writeTo(System.out);
    }

    /**
    * Erzeugt eine SOAP-Message
    */
    public SOAPMessage createMessage() throws SOAPException {

    // Erzeugen der SOAP Message-Factory
    MessageFactory mf = MessageFactory.newInstance();

    // Erzeugen einer neuen SOAP Nachricht
    SOAPMessage message = mf.createMessage();

    // Zugriff auf den SOAP Body, der später die Nuetzdaten trägt
    SOAPPart part = message.getSOAPPart();
    SOAPEnvelope envelope = part.getEnvelope();
    SOAPBody body = envelope.getBody();

    // Erzeugen des Wurzelelementes '<contact>' der Nutzdaten
    Name root = envelope.createName("contact");

    // Einfügen des Elementes in den SOAP Body
    SOAPBodyElement rootElement = body.addBodyElement(root);

    // Hinzufügen des Attributes 'status="new"'
    Name status = envelope.createName("status");
    rootElement.addAttribute(status, "new");

    // Aufbau und Einfügen des Elementes '<name>'
    Name contactName = envelope.createName("name");
    SOAPElement soapElementName =
    rootElement.addChildElement(contactName);
    soapElementName.addTextNode("Thomas Stark");

    // Aufbau und Einfügen des Elementes '<email>'
    Name contactEmail = envelope.createName("email");
    SOAPElement soapElementEmail =
    rootElement.addChildElement(contactEmail);
    soapElementEmail.addTextNode("[email protected] e");

    return message;
    }
    }
    ----------------------------------------------
    Das war's
    leider die üblichen Verständnisschwierigkeiten bei einem Sart eines doch riesigen Themas

    Wer hat eine Lösung oder ein ähnliches kleines Programm, damit mir einfach die Vorgänge klarer werden.

    lg
    Dietmar
Working...
X