Generating Java artifacts for JAX-WS applications from a WSDL file
Use JAX-WS tools to generate the Java artifacts that are needed to develop JAX-WS Web services when starting with a WSDL file.
When using a top-down development approach to developing JAX-WS Web services by starting with a WSDL file, obtain the URL of the WSDL file.
(Windows) If the WSDL file is a local file, the URL looks like this example: file:drive:\path\file_name.wsdl.
[Linux] [AIX] [HP-UX] [Solaris]
If the WSDL file is a local file, the URL looks like this example: file:/path/file_name.wsdl.
You can also specify local files using the absolute or relative file system path.
Use the JAX-WS tool, wsimport, to process a WSDL file and generate portable Java artifacts that are used to create a Web service. The portable Java artifacts created using the wsimport tool are:
- Service endpoint interface (SEI)
- Service class
- Exception class that is mapped from the wsdl:fault class (if any)
- JAXB generated type values which are Java classes mapped from XML schema types
Supported configurations: The wsimport, wsgen, schemagen and xjc command-line tools are not supported on the z/OS platform. This functionality is provided by the assembly tools provided with WAS running on the z/OS platform. Read about these command-line tools for JAX-WS applications to learn more about these tools.
Best practice: WebSphere provides JAX-WS and JAXB tooling. The wsimport, wsgen, schemagen and xjc command-line tools are located in...
APP_ROOT\bin\Similar tooling is provided by the Java SE Development Kit (JDK) 6. For the most part, artifacts generated by both the tooling provided with WebSphere and the JDK are the same. In general, artifacts generated by the JDK tools are portable across compliant runtime environments. However, it is a best practice to use the WebSphere tools to achieve seamless integration within the WebSphere environment. bprac
Run the wsimport command to generate the portable client artifacts.
The wsimport tool is located in...
APP_ROOT\bin\
(Windows)
APP_ROOT\bin\wsimport.bat wsdl_URL
[AIX] [HP-UX] [Linux] [Solaris]
APP_ROOT/bin/wsimport.sh wsdl_URL(Optional) Use the following options with the wsimport command:
- Use the -verbose option to see a list of generated files when you run the command.
- Use the -keep option to keep generated Java files.
- Use the -wsdlLocation option to specify the location of the WSDL file.
Best practice: A best practice for ensuring that you produce a JAX-WS Web services client EAR file that is portable to other systems is to package the WSDL document within the application module such as a Web services client JAR file or a WAR file. We can specify a relative URI for the location of the WSDL file by using the-wsdllocation annotation attribute. For example, if the MyService.wsdl file is located in...
META-INF/wsdl/
...then run the wsimport tool and use the -wsdllocation option to specify the value to be used for the location of the WSDL file. This ensures that the generated artifacts contain the correct -wsdllocation information needed when the application is loaded into the admin console.
wsimport -keep -wsdllocation=META-INF/wsdl/MyService.wsdl bprac
- Use the -b option if we are using WSDL or schema customizations to specify external binding files that contain the customizations.
You can customize the bindings in the WSDL file to enable asynchronous mappings or attachments. To generate asynchronous interfaces, add the client-side only customization enableAsyncMapping binding declaration to the wsdl:definitions element or in an external binding file that is defined in the WSDL file. Use the enableMIMEContent binding declaration in the custom client or server binding file to enable or disable the default mime:content mapping rules. For additional information on custom binding declarations, see chapter 8 the JAX-WS specification.
Read about the wsimport command to learn more about this command and additional options that we can specify.
Results
we have the required Java artifacts to create a JAX-WS Web service. To learn more about the usage, syntax, and parameters for the wsimport command, see the wsimport command for JAX-WS applications documentation.
Example
The following example illustrates how the wsimport command is used to process the sample Ping WSDL file to generate portable artifacts.
After generating the template files using the wsimport command, the following files are generated:
- Copy the following ping.wsdl WSDL file to a temporary directory.
<?xml version="1.0" encoding="UTF-8"?> <!-- * This program can be used, run, copied, modified and distributed * without royalty for the purpose of developing, using, marketing, or distributing. --> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PingService" targetNamespace="http://com/ibm/was/wssample/sei/ping/"> <wsdl:types> <xsd:schema targetNamespace="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="pingStringInput"> <xsd:complexType> <xsd:sequence> <xsd:element name="pingInput" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="pingOperationRequest"> <wsdl:part element="tns:pingStringInput" name="parameter" /> </wsdl:message> <wsdl:portType name="PingServicePortType"> <wsdl:operation name="pingOperation"> <wsdl:input message="tns:pingOperationRequest" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PingSOAP" type="tns:PingServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="pingOperation"> <soap:operation soapAction="pingOperation" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="PingService"> <wsdl:port binding="tns:PingSOAP" name="PingServicePort"> <soap:address location="http://localhost:9082/WSSampleSei/PingService" /> </wsdl:port> </wsdl:service> </wsdl:definitions>- Run the wsimport command from the APP_ROOT\bin\ directory.
(Windows)
APP_ROOT\bin\wsimport.bat -keep -verbose ping.wsdl
[Linux] [AIX] [HP-UX] [Solaris]Operating systems such as AIX or Linux source the script to the parent shell to inherit the exported variables by running the following command:
. ./setupCmdLine.sh (Notice the space between the periods.)from the . /APP_ROOT>/bin directory. Run the wsimport command,APP_ROOT/bin/wsimport.sh -keep -verbose ping.wsdlcom\ibm\was\wssample\sei\ping\ObjectFactory.java com\ibm\was\wssample\sei\ping\package-info.java com\ibm\was\wssample\sei\ping\PingServicePortType.java com\ibm\was\wssample\sei\ping\PingStringInput.java com\ibm\was\wssample\sei\ping\PingService.javaThe ObjectFactory.java file contains factory methods for each Java content interface and Java element interface generated in the associated ping package. The package-info.java file takes the targetNamespace value and creates the directory structure. The PingServicePortType.java file is the generated service endpoint interface (SEI) class that contains the ping method definition. The PinStringInput.java file contains the JAXB generated type values which are Java classes mapped from XML schema types. The PingService.java file is the generated service provider class file used by the JAX-WS client.
Next steps
Complete the implementation of the Web service application by completing the Java Beansor enterprise beans implementation.
wsimport command for JAX-WS applications 
Related concepts
Assembly tools
JAX-WS
Related tasks
Implementing Web services applications from existing WSDL files with JAX-WS
Completing the Java Beans implementation for JAX-WS applications
Completing the EJB implementation for JAX-WS applications