Thomas Darimont
Erfahrenes Mitglied
Hallo,
hier mal ein kleines Beispiel für die Erstellung und Verwendung eines Webservices
unter Java 6:
Unser ICalculator interface:
Unsere Calculator Implementierung:
Unser Exporter / Client:
Ausgabe:
Die Annotation
im ICalculator ist notwendig, da sonst als Default SOPABinding DocumentStyle verwendet wird
und die Laufzeit dann nach den entsprechenden Operations / Request / Response Wrapper Klassen sucht...
Deshalb bekommt man dann diese Exception:
Resultiert in:
Unser WSDL:
Das Beispiel ist sogar so einfach, dass man sogar von einem C# Client aus den WebService ohne Probleme benutzen kann
Gruß Tom
hier mal ein kleines Beispiel für die Erstellung und Verwendung eines Webservices
unter Java 6:
Unser ICalculator interface:
Java:
package de.tutorials;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Use;
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
//@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = Use.ENCODED)
interface ICalculator {
@WebMethod
int computeSumOf(int a, int b);
}
Unsere Calculator Implementierung:
Java:
package de.tutorials;
import javax.jws.WebService;
/**
* @author Tom
*/
@WebService(serviceName = "Calculator", portName = "Calculator", endpointInterface = "de.tutorials.ICalculator")
public class Calculator implements ICalculator {
public int computeSumOf(int a, int b) {
return a + b;
}
}
Unser Exporter / Client:
Java:
/**
*
*/
package de.tutorials;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
/**
* @author Tom
*/
public class SimpleWebServiceExample {
public static void main(String[] args) throws Exception {
Endpoint endpoint = null;
try {
endpoint = Endpoint.publish("http://localhost:44444/Calculator", new Calculator());
System.out.println("Service Published!");
Service service = Service.create(new URL("http://localhost:44444/Calculator?wsdl"), new QName(
"http://tutorials.de/", "Calculator"));
ICalculator simpleService = service.getPort(ICalculator.class);
System.out.println(simpleService.computeSumOf(11, 12));
} finally {
//endpoint.stop();
}
}
}
Ausgabe:
Code:
Service Published!
23
Die Annotation
Java:
@SOAPBinding(style = SOAPBinding.Style.RPC)
und die Laufzeit dann nach den entsprechenden Operations / Request / Response Wrapper Klassen sucht...
Deshalb bekommt man dann diese Exception:
Java:
...
@WebService
//@SOAPBinding(style = SOAPBinding.Style.RPC)
interface ICalculator {
Code:
Exception in thread "main" Server Runtime Error: class: de.tutorials.jaxws.ComputeSumOf could not be found
at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:269)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:87)
at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:59)
at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
at de.tutorials.SimpleWebServiceExample.main(SimpleWebServiceExample.java:19)
Caused by: class: de.tutorials.jaxws.ComputeSumOf could not be found
at com.sun.xml.internal.ws.modeler.RuntimeModeler.getClass(RuntimeModeler.java:271)
at com.sun.xml.internal.ws.modeler.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:562)
at com.sun.xml.internal.ws.modeler.RuntimeModeler.processMethod(RuntimeModeler.java:509)
at com.sun.xml.internal.ws.modeler.RuntimeModeler.processClass(RuntimeModeler.java:355)
at com.sun.xml.internal.ws.modeler.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:251)
at com.sun.xml.internal.ws.server.RuntimeEndpointInfo.createSEIModel(RuntimeEndpointInfo.java:170)
at com.sun.xml.internal.ws.server.RuntimeEndpointInfo.init(RuntimeEndpointInfo.java:317)
at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:298)
at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:263)
... 4 more
Unser WSDL:
XML:
<definitions targetNamespace="http://tutorials.de/" name="Calculator">
<types/>
?
<message name="computeSumOf">
<part name="arg0" type="xsd:int"/>
<part name="arg1" type="xsd:int"/>
</message>
?
<message name="computeSumOfResponse">
<part name="return" type="xsd:int"/>
</message>
?
<portType name="ICalculator">
?
<operation name="computeSumOf" parameterOrder="arg0 arg1">
<input message="tns:computeSumOf"/>
<output message="tns:computeSumOfResponse"/>
</operation>
</portType>
?
<binding name="CalculatorBinding" type="tns:ICalculator">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
?
<operation name="computeSumOf">
<soap:operation soapAction=""/>
?
<input>
<soap:body use="literal" namespace="http://tutorials.de/"/>
</input>
?
<output>
<soap:body use="literal" namespace="http://tutorials.de/"/>
</output>
</operation>
</binding>
?
<service name="Calculator">
?
<port name="Calculator" binding="tns:CalculatorBinding">
<soap:address location="http://localhost:44444/Calculator"/>
</port>
</service>
</definitions>
Das Beispiel ist sogar so einfach, dass man sogar von einem C# Client aus den WebService ohne Probleme benutzen kann
Gruß Tom
Zuletzt bearbeitet von einem Moderator: