tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
6283
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    derDietmar derDietmar ist offline Grünschnabel
    Registriert seit
    Jan 2008
    Beiträge
    3
    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("thomas@masterclass.de");

    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

    Anhang
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hi,

    vielleicht ganz interessant zum rumspielen:
    http://www.tutorials.de/forum/java/2...6-mustang.html

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    derDietmar derDietmar ist offline Grünschnabel
    Registriert seit
    Jan 2008
    Beiträge
    3
    Hallo Tom,

    Danke für den Link und für das Beispiel.

    Ich bräuchte eine Idee wie ich ein WebService "händisch, manuell" ohne NetBeans bei einem Application Server z.B. JBoss deploy.

    Hast du das schon mal händisch gemacht ?!

    Gruss
    Dietmar
     

  4. #4
    derDietmar derDietmar ist offline Grünschnabel
    Registriert seit
    Jan 2008
    Beiträge
    3
    Zitat Zitat von Thomas Darimont Beitrag anzeigen
    Hi,

    vielleicht ganz interessant zum rumspielen:
    http://www.tutorials.de/forum/java/2...6-mustang.html

    Gruß Tom
    Hallo Tom,

    Danke für den Link und für das Beispiel.

    Ich bräuchte eine Idee wie ich ein WebService "händisch, manuell" ohne NetBeans bei einem Application Server z.B. JBoss deploy.

    Hast du das schon mal händisch gemacht ?!

    Gruss
    Dietmar
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    für JBoss 4.x musst du dir für JAXWS Webservices einen patch herunterladen:
    http://labs.jboss.com/jbossws/downloads/
    http://labs.jboss.com/file-access/de...l-2.0.2.GA.txt

    JAXWS webservices können in JBossWS als .war Archive deployed werden.

    Beispiel:

    Unser JAX-WS Webservice:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    /**
     * 
     */
    package de.tutorials;
     
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
     
    /**
     * @author Thomas.Darimont
     *
     */
    @WebService(name="EndpointInterface",targetNamespace="http://ws.tutorials.de/services",serviceName="Calculator")
    @SOAPBinding(style=SOAPBinding.Style.RPC)
    public class Calculator {
        @WebMethod
        @WebResult(name="sum")
        public double sumFor(@WebParam(name="firstNumber") double firstNumber, @WebParam(name="secondNumber") double secondNumber){
            return firstNumber+ secondNumber;
        }
    }

    web.xml
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    <?xml version="1.0" encoding="UTF-8"?>
     
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      version="2.4">
     
      <servlet>
        <servlet-name>Calculator</servlet-name>
        <servlet-class>de.tutorials.Calculator</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>Calculator</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
     
    </web-app>

    Das in ein war zusammenpacken (siehe Anhang) und in das entsprechende server/deploy Verzeichnis kopieren.:

    Code :
    1
    2
    3
    
    13:43:01,984 INFO  [DefaultEndpointRegistry] register: jboss.ws:context=de.tutorials.training.webservices.jaxws,endpoint=Calculator
    13:43:02,015 INFO  [TomcatDeployer] deploy, ctxPath=/de.tutorials.training.webservices.jaxws, warUrl=.../tmp/deploy/tmp64747de.tutorials.training.webservices.jaxws-exp.war/
    13:43:02,359 INFO  [WSDLFilePublisher] WSDL published to: file:/D:/stuff/jboss/4.2.2GA/jboss-4.2.2.GA/server/all/data/wsdl/de.tutorials.training.webservices.jaxws.war/Calculator64748.wsdl

    Anschließend unter:
    http://localhost:8080/jbossws/
    bzw.
    http://localhost:8080/jbossws/services

    Die deployedten Web Services anzeigen lassen.

    Das WSDL das für unseren Webservice generiert wurde schaut dann so aus:
    http://127.0.0.1:8080/de.tutorials.t...ces.jaxws?wsdl
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    <definitions name='Calculator' targetNamespace='http://ws.tutorials.de/services' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://ws.tutorials.de/services' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
     <types></types>
     <message name='EndpointInterface_sumForResponse'>
      <part name='sum' type='xsd:double'></part>
     </message>
     <message name='EndpointInterface_sumFor'>
      <part name='firstNumber' type='xsd:double'></part>
      <part name='secondNumber' type='xsd:double'></part>
     </message>
     
     <portType name='EndpointInterface'>
      <operation name='sumFor' parameterOrder='firstNumber secondNumber'>
       <input message='tns:EndpointInterface_sumFor'></input>
       <output message='tns:EndpointInterface_sumForResponse'></output>
      </operation>
     </portType>
     <binding name='EndpointInterfaceBinding' type='tns:EndpointInterface'>
      <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
      <operation name='sumFor'>
     
       <soap:operation soapAction=''/>
       <input>
        <soap:body namespace='http://ws.tutorials.de/services' use='literal'/>
       </input>
       <output>
        <soap:body namespace='http://ws.tutorials.de/services' use='literal'/>
       </output>
      </operation>
     </binding>
     
     <service name='Calculator'>
      <port binding='tns:EndpointInterfaceBinding' name='EndpointInterfacePort'>
       <soap:address location='http://127.0.0.1:8080/de.tutorials.training.webservices.jaxws'/>
      </port>
     </service>
    </definitions>

    Fertig.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. JBoss Webservice + EAR mit Parameter starten
    Von devilmc im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 06.10.10, 16:57
  2. Webservice ohne Eclipse auf Tomcat
    Von oli001 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 27.04.09, 08:42
  3. stateful ejb unter jboss als webservice zur verfügung stellen...
    Von janmarti11 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 09.04.09, 11:55
  4. Java 6 JBoss WebService - Fehlermeldung
    Von friedak im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 04.05.07, 00:32
  5. Webservice ohne Axis über URL
    Von BugsBastard im Forum Java
    Antworten: 4
    Letzter Beitrag: 28.09.05, 09:36