Java & J2EE Page 7 - Using RPC-Style Web Services with J2EE |
The WSDL file generated by wscompile is shown in Listing 20.4. It is worth taking a few moments to study this information because it provides a good insight into the way that Web Services work. Listing 20.4 Generated GreetingService WSDL (GreetingService.wsdl) <?xml version="1.0" encoding="UTF-8"?> <definitions name="GreetingService" targetNamespace="urn:J2EE21Examples" xmlns:tns="urn:J2EE21Examples" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <types/> <message name="Greeting_sayHelloTo"> <part name="String_1" type="xsd:string"/> </message> <message name="Greeting_sayHelloToResponse"> <part name="result" type="xsd:string"/> </message> <portType name="Greeting"> <operation name="sayHelloTo" parameterOrder="String_1"> <input message="tns:Greeting_sayHelloTo"/> <output message="tns:Greeting_sayHelloToResponse"/> </operation> </portType> <binding name="GreetingBinding" type="tns:Greeting"> <soap:binding transport=http://schemas.xmlsoap.org/soap/http The document consists of the following sections:
This is a very simple WSDL document defining a very simple service. WSDL documents are typically far longer and more complex. Because By examining the WSDL document, you can see how the information defined in the wscompile configuration file forms part of the WSDL. The targetNamespace and tns prefix in the WSDL are associated with the targetNamespace defined in the configuration file. The name of the WSDL service comes from the name attribute of the service element in the configuration file. The WSDL port is formed by appending the string "Port" to the name of the interface defined as a child of the service element in the configuration file. One thing to note about the generated WSDL is that it is not complete. All the relevant type definitions are there (none in this case, but you will see more later), as are the definitions of the operations and their parameters and the protocol bindings. However, in the SOAP address associated with the port element, there is no endpoint address (the location is set to "REPLACE WITH ACTUAL URL"). This is not surprising because this WSDL has been generated from a class on the disk and wscompile has no way of knowing where this service will be deployed. Part of the deployment process will involve filling out this WSDL endpoint information so that the WSDL can be employed by a Web Service client. The Mapping File The mapping file—mapping.xml—provides a link between information in the WSDL document and the Java code supplied to support the service defined. There is a 1-1 relationship between mapping files and WSDL documents, and there are other constraints on the WSDL to assist the mapping, such as there being only one service description in a WSDL file. A full list of these restrictions and a detailed description of the mapping file (termed the "JAX-RPC Mapping Deployment Descriptor") can be found in section 7.3 of the document Web Services for J2EE document that was produced by JSR109. Thankfully, the mapping file for our simple Greeting service is itself simple. It starts with a standard prolog and the root element java-wsdl-mapping: <?xml version="1.0" encoding="UTF-8"?> <java-wsdl-mapping version="1.1" 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://www.ibm.com/webservices/xsd/ Within the root, you define package-mapping elements that map the namespaces using the WSDL to Java packages in which you define your classes. For the simple service, you just need to indicate that the service defined in the WSDL document under the target namespace of urn:J2EE21Examples is associated with the code defined in the Java package wsexamples: <package-mapping> <package-type>wsexamples</package-type> <namespaceURI>urn:J2EE21Examples</namespaceURI> </package-mapping> The remainder of the mapping file defines how the WSDL service, port and binding relate to the parts of the Java Greeting interface defined earlier. The full mapping file is shown in Listing 20.5. Listing 20.5 Mapping File for the Simple Greeting Service wsdl-service-name> <port-mapping> <port-name>GreetingPort</port-name> <java-port-name>GreetingPort</java-port-name> </port-mapping> </service-interface-mapping> <service-endpoint-interface-mapping> <service-endpoint-interface>wsexamples.Greeting wsdl-message> <wsdl-message-part-name>String_1</wsdl-message-part-name> <parameter-mode>IN</parameter-mode> </wsdl-message-mapping> </method-param-parts-mapping> <wsdl-return-value-mapping> <method-return-value>java.lang.String</method-return-value><wsdl-message xmlns:wsdlMsgNS="urn:J2EE21Examples"> wsdl-message> <wsdl-message-part-name>result</wsdl-message-part-name> </wsdl-return-value-mapping> </service-endpoint-method-mapping> </service-endpoint-interface-mapping></java-wsdl-mapping> Packaging and Deploying the Simple Web Service Using J2EE RI deploytool This section shows how to deploy the simple Web Service to the J2EE RI. You will get the most out of this if you actually perform these steps (but if you're on a train or plane, just read the text and make do). As usual, start up the PointBase database server and J2EE RI server before starting deploytool.
blog comments powered by Disqus |