ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
6283
6283
EMPFEHLEN
-
05.01.08 10:25 #1
- 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
-
05.01.08 11:41 #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ß TomJava 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
-
06.01.08 11:42 #3
- 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
-
06.01.08 11:43 #4
- Registriert seit
- Jan 2008
- Beiträge
- 3
-
06.01.08 13:50 #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ß TomJava 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
-
JBoss Webservice + EAR mit Parameter starten
Von devilmc im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 06.10.10, 16:57 -
Webservice ohne Eclipse auf Tomcat
Von oli001 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 27.04.09, 08:42 -
stateful ejb unter jboss als webservice zur verfügung stellen...
Von janmarti11 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 09.04.09, 11:55 -
Java 6 JBoss WebService - Fehlermeldung
Von friedak im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 04.05.07, 00:32 -
Webservice ohne Axis über URL
Von BugsBastard im Forum JavaAntworten: 4Letzter Beitrag: 28.09.05, 09:36





Zitieren


Login





