| <!-- | |
| ~ Licensed to the Apache Software Foundation (ASF) under one | |
| ~ or more contributor license agreements. See the NOTICE file | |
| ~ distributed with this work for additional information | |
| ~ regarding copyright ownership. The ASF licenses this file | |
| ~ to you under the Apache License, Version 2.0 (the | |
| ~ "License"); you may not use this file except in compliance | |
| ~ with the License. You may obtain a copy of the License at | |
| ~ | |
| ~ http://www.apache.org/licenses/LICENSE-2.0 | |
| ~ | |
| ~ Unless required by applicable law or agreed to in writing, | |
| ~ software distributed under the License is distributed on an | |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| ~ KIND, either express or implied. See the License for the | |
| ~ specific language governing permissions and limitations | |
| ~ under the License. | |
| --> | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| <html xmlns="http://www.w3.org/1999/xhtml"> | |
| <head> | |
| <meta name="generator" content= | |
| "HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /> | |
| <meta http-equiv="content-type" content="" /> | |
| <title>JiBX Integration with Axis2</title> | |
| </head> | |
| <body> | |
| <h1>JiBX Integration With Axis2</h1> | |
| <p>This document describes using JiBX data binding with Axis2. JiBX | |
| differs from the other data binding techniques supported by Axis2 | |
| in that it allows you to use your own Java data objects (as opposed | |
| to Java data objects generated from a schema definition). JiBX also | |
| provides a nicer form of unwrapped Web services interface than is | |
| supported by the other data binding techniques. On the downside, | |
| JiBX requires more setup than the other data binding techniques - | |
| in particular, you need to come up with a set of data classes and a | |
| binding definition in order to work with JiBX in Axis2.</p> | |
| <h2>Content</h2> | |
| <ul> | |
| <li><a href="#intro">Introduction</a></li> | |
| <li><a href="#wrapped">Wrapped vs. unwrapped</a></li> | |
| <li><a href="#java">Starting from Java</a></li> | |
| <li><a href="#wsdl">Starting from WSDL</a></li> | |
| <li><a href="#codegen">Axis2 JiBX Code Generation</a></li> | |
| <li><a href="#coming">Coming Attractions</a></li> | |
| </ul> | |
| <a name="intro" id="intro"></a> | |
| <h2>Introduction</h2> | |
| <p><a href="http://www.jibx.org">JiBX data binding</a> supports | |
| fast and flexible conversions between plain old Java objects | |
| (POJOs) and XML. JiBX uses a mapped binding approach that's based | |
| on binding definition documents you provide. This approach let's | |
| you customize the way your Java objects are converted to and from | |
| XML. You can even define multiple bindings to use the same Java | |
| objects with different XML representations. These features make | |
| JiBX especially useful if you're developing a Web service based on | |
| existing Java code, or when you need to support multiple XML | |
| representations for a Web service (as when you're using versioned | |
| schema definitions).</p> | |
| <p>Axis2 supports using JiBX with your Web services, including | |
| generating the necessary linkage code for both client and server | |
| sides. However, the Axis2 support for JiBX does not currently | |
| include code generation from the schema for a Web service - you | |
| need to provide your own data classes and JiBX binding definition, | |
| and you also need to make sure that the binding definition matches | |
| the XML structures defined for your Web service. The JiBX project | |
| provides some basic tools to help with code generation from schema, | |
| binding generation from Java classes, and schema generation from | |
| the combination of Java classes and a binding definition. In the | |
| future, improved versions of these tools will be integrated | |
| directly into the Axis2 framework support, but for now you're on | |
| your own with this part of the setup.</p> | |
| <p>You can use JiBX data binding both to expose existing Java code | |
| as a service, and to build a client for an existing service. This | |
| document runs through the sequence of steps involved for each of | |
| these cases, just to help users understand the basic approach to | |
| working with JiBX in Axis2. You can find full instructions on the | |
| standard JiBX parts of this sequence on the <a href= | |
| "http://www.jibx.org">JiBX Web site</a>.</p> | |
| <a name="wrapped" id="wrapped"></a> | |
| <h2>Wrapped vs. unwrapped</h2> | |
| <p>Axis2 support for JiBX currently only works with the | |
| document-literal (doc/lit) form of Web services definitions. | |
| Doc/lit Web services generally use particular schema elements as | |
| input and output from each operation, and the Axis2 support for | |
| JiBX assumes this structure (which is also the structure required | |
| for compatibility with the <a href= | |
| "http://www.ws-i.org/Profiles/BasicProfile-1.1.html">WS-I Basic | |
| Profile</a>).</p> | |
| <p>A popular subset of doc/lit Web services use a form called | |
| "wrapped". Wrapped doc/lit Web services define service operations | |
| that correspond to method calls, using input and output element | |
| names based on the method name and embedding the actual parameter | |
| values for the method call within the input element.</p> | |
| <p>When used with Axis2, JiBX supports both general doc/lit and | |
| wrapped service definitions. Wrapped service definitions can be | |
| "unwrapped" during code generation to provide a greatly simplified | |
| interface. JiBX unwrapping of service definitions is not compatible | |
| with the unwrapping support for other data binding frameworks used | |
| with Axis2, but most users will find the JiBX approach easy and | |
| convenient. See the <a href="./jibx-unwrapped-example.html">JiBX | |
| Unwrapped Example</a> and the <a href= | |
| "./jibx-doclit-example.html">JiBX Document/Literal Example</a> | |
| pages for a detailed comparison of the two forms of service | |
| interface.</p> | |
| <a name="java" id="java"></a> | |
| <h2>Starting from Java</h2> | |
| <p>Here's the sequence of steps for using JiBX with Axis2 to expose | |
| existing Java code as a Web service:</p> | |
| <ol> | |
| <li>Create a JiBX binding definition for the data being transferred | |
| by the Web service (you may be able to use the JiBX binding | |
| generator to help with this step).</li> | |
| <li>Create a schema that matches the XML defined by your binding | |
| (you may be able to use the JiBX schema generator to help with | |
| this). If you're using a wrapped form of interface to your service | |
| you'll also need to create schema definitions for the wrapper input | |
| and output elements used by each operation.</li> | |
| <li>Create a WSDL document for your service, with the schema | |
| embedded or imported.</li> | |
| <li>Generate Axis2 server-side linkage code using WSDL2Java with | |
| the WSDL and your binding definition.</li> | |
| <li>Run the JiBX binding compiler on your Java classes to add the | |
| actual binding code.</li> | |
| <li>Include the <i>axis2-jibx.jar</i> in your runtime classpath, | |
| along with the <i>jibx-runtime.jar</i>.</li> | |
| </ol> | |
| <p>If you use a wrapped interface for your Web service you can | |
| expose method calls in your existing code directly as operations in | |
| the service. In this case you normally just use your existing data | |
| objects with JiBX data binding, and add schema definitions for the | |
| wrapper elements. See the <a href= | |
| "./jibx-unwrapped-example.html">JiBX Unwrapped Example</a> page for | |
| more details on how this works.</p> | |
| <p>If you use a non-wrapped interface for your Web service you need | |
| to define classes to hold the data input and output from each | |
| operation. In this case these holder classes need to be included in | |
| the JiBX binding definition. See the <a href= | |
| "./jibx-doclit-example.html">JiBX Document/Literal Example</a> page | |
| for more details on this case.</p> | |
| <a name="wsdl" id="wsdl"></a> | |
| <h2>Starting from WSDL</h2> | |
| <p>Here's the sequence of steps for using JiBX with Axis2 to | |
| implement a client for an existing Web service (or the actual | |
| service, when you've been supplied with the WSDL your service is to | |
| implement):</p> | |
| <ol> | |
| <li>Create Java classes for the data being transferred by the Web | |
| service, and a JiBX binding definition that maps these classes to | |
| the schema defined by the Web service (you may be able to use the | |
| JiBX xsd2jibx tool to help with this).</li> | |
| <li>Generate Axis2 client linkage code using WSDL2Java with the | |
| WSDL and your binding definition.</li> | |
| <li>Run the JiBX binding compiler on your Java classes to add the | |
| actual binding code.</li> | |
| <li>Include the <i>axis2-jibx.jar</i> in your runtime classpath, | |
| along with the <i>jibx-runtime.jar</i></li> | |
| </ol> | |
| <p>As with the starting from Java case, there are some differences | |
| in the handling depending on whether your service definition fits | |
| the wrapped form. See the <a href= | |
| "./jibx-unwrapped-example.html">JiBX Unwrapped Example</a> and | |
| <a href="./jibx-doclit-example.html">JiBX Document/Literal | |
| Example</a> pages for more details.</p> | |
| <a name="codegen" id="codegen"></a> | |
| <h2>WSDL2Java usage</h2> | |
| <p>To run the WSDL2Java tool for JiBX data binding you need:</p> | |
| <ol> | |
| <li>To specify <i>-d jibx</i> to select JiBX binding.</li> | |
| <li>You also generally need an additional parameter, | |
| <i>-Ebindingfile {file}</i> (where <i>{file}</i> is the file path | |
| to your JiBX binding definition).</li> | |
| <li>Finally, you need to have the <i>axis2-jibx-XXXX.jar</i>, the | |
| <i>jibx-bind-XXXX.jar</i>, and the <i>jibx-run-XXXX.jar</i> files | |
| from your Axis2 distribution included in the WSDL2Java | |
| classpath.</li> | |
| </ol> | |
| <p>If you want to use the unwrapped form of interface you also need | |
| to specify the <i>-uw</i> option to WSDL2Java. In this case your | |
| JiBX binding definition must include abstact mappings for all the | |
| complex objects which correspond to method parameters, and each | |
| abstract mapping must specify a <i>type-name</i> attribute that | |
| matches the schema <i>complexType</i> used in the WSDL. You can | |
| also use formats in the binding definition to define the handling | |
| of schema <i>simpleType</i>s. Schema types corresponding to Java | |
| primitives and simple objects with built-in JiBX conversions are | |
| handled automatically, and if all the parameter and return values | |
| in your wrapped WSDL are of these types you don't even need a JiBX | |
| binding definition. This is the one case where the <i>-Ebindingfile | |
| {file}</i> parameter is not needed.</p> | |
| <p>If you're not unwrapping the interface, you must use a JiBX | |
| binding definition and it must include a concrete mapping for each | |
| element used as input or output by any operation.</p> | |
| <a name="coming" id="coming"></a> | |
| <h2>Coming Attractions</h2> | |
| <p>Work is in-progress on better tools to support generating Java | |
| classes and corresponding JiBX binding definitions from an input | |
| schema, and also for generating binding+schema generation from | |
| existing code. These features will be integrated into the Axis2 | |
| JiBX support when they are available. Check the <a href= | |
| "http://www.jibx.org">JiBX project site</a> for updates on JiBX.</p> | |
| <h2>References</h2> | |
| <p><a href= | |
| "http://jibx.sourceforge.net/tutorial/binding-tutorial.html">JiBX: | |
| Bindings Tutorial</a></p> | |
| </body> | |
| </html> |