Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 78966 invoked from network); 7 Nov 2006 09:15:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Nov 2006 09:15:02 -0000 Received: (qmail 91409 invoked by uid 500); 7 Nov 2006 09:15:12 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 91300 invoked by uid 500); 7 Nov 2006 09:15:11 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 91270 invoked by uid 500); 7 Nov 2006 09:15:11 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 91256 invoked by uid 99); 7 Nov 2006 09:15:11 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Nov 2006 01:15:11 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 07 Nov 2006 01:14:59 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 33D401A9846; Tue, 7 Nov 2006 01:14:32 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r472043 - /webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html Date: Tue, 07 Nov 2006 09:14:32 -0000 To: axis2-cvs@ws.apache.org From: chatra@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061107091432.33D401A9846@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: chatra Date: Tue Nov 7 01:14:31 2006 New Revision: 472043 URL: http://svn.apache.org/viewvc?view=rev&rev=472043 Log: minor change Modified: webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html Modified: webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html?view=diff&rev=472043&r1=472042&r2=472043 ============================================================================== --- webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html (original) +++ webservices/axis2/branches/java/1_1/xdocs/1_1/jibx/jibx-unwrapped-example.html Tue Nov 7 01:14:31 2006 @@ -5,15 +5,15 @@ -

JiBX unwrapped document/literal

+

JiBX Unwrapped document/literal

Code generation for JiBX data binding converts operations defined by a Web -service to method calls. In the most general case of document/literal (doc/lit) -Web services the generated methods each take a single parameter object and -return a single result object. This type of interface can be painful for -developers because it adds both a layer of indirection and potentially a large -number of extra classes (one input and one output class for each generated -method).

+service to method calls. In the most general case of document/literal +(doc/lit) Web services the generated methods each take a single parameter +object and return a single result object. This type of interface can be +painful for developers because it adds both a layer of indirection and +potentially a large number of extra classes (one input and one output class +for each generated method).

Fortunately, there's an alternative way of generating methods that gives a much more usable API for many Web services. This alternative is called @@ -23,115 +23,110 @@ for operations.

Here's a sample wrapped WSDL (partial) by way of an example:

- -
-<wsdl:definitions targetNamespace="http://ws.sosnoski.com/library/wsdl"
+
<wsdl:definitions targetNamespace="http://ws.sosnoski.com/library/wsdl"
     xmlns:tns="http://ws.sosnoski.com/library/types"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">
+    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">
     
-  <wsdl:types>
+  <wsdl:types>
   
     <schema elementFormDefault="qualified"
         targetNamespace="http://ws.sosnoski.com/library/types"
-        xmlns="http://www.w3.org/2001/XMLSchema">
+        xmlns="http://www.w3.org/2001/XMLSchema">
         
-      <element name="getBook">
-        <complexType>
-          <sequence>
-            <element name="isbn" type="string"/>
-          </sequence>
-        </complexType>
-      </element>
+      <element name="getBook">
+        <complexType>
+          <sequence>
+            <element name="isbn" type="string"/>
+          </sequence>
+        </complexType>
+      </element>
       
-      <element name="getBookResponse">
-        <complexType>
-          <sequence>
-            <element name="book" minOccurs="0" type="tns:BookInformation"/>
-          </sequence>
-        </complexType>
-      </element>
+      <element name="getBookResponse">
+        <complexType>
+          <sequence>
+            <element name="book" minOccurs="0" type="tns:BookInformation"/>
+          </sequence>
+        </complexType>
+      </element>
       
-      <element name="addBook">
-        <complexType>
-          <sequence>
-            <element name="type" type="string"/>
-            <element name="isbn" type="string"/>
-            <element name="author" minOccurs="0" maxOccurs="unbounded" type="string"/>
-            <element name="title" type="string"/>
-          </sequence>
-        </complexType>
-      </element>
+      <element name="addBook">
+        <complexType>
+          <sequence>
+            <element name="type" type="string"/>
+            <element name="isbn" type="string"/>
+            <element name="author" minOccurs="0" maxOccurs="unbounded" type="string"/>
+            <element name="title" type="string"/>
+          </sequence>
+        </complexType>
+      </element>
       
-      <element name="addBookResponse">
-        <complexType>
-          <sequence>
-            <element name="success" type="boolean"/>
-          </sequence>
-        </complexType>
-      </element>
+      <element name="addBookResponse">
+        <complexType>
+          <sequence>
+            <element name="success" type="boolean"/>
+          </sequence>
+        </complexType>
+      </element>
       
-      <complexType name="BookInformation">
-        <sequence>
-          <element name="author" minOccurs="0" maxOccurs="unbounded" type="string"/>
-          <element name="title" type="string"/>
-        </sequence>
-        <attribute name="type" use="required" type="string"/>
-        <attribute name="isbn" use="required" type="string"/>
-      </complexType>
+      <complexType name="BookInformation">
+        <sequence>
+          <element name="author" minOccurs="0" maxOccurs="unbounded" type="string"/>
+          <element name="title" type="string"/>
+        </sequence>
+        <attribute name="type" use="required" type="string"/>
+        <attribute name="isbn" use="required" type="string"/>
+      </complexType>
       
-    </schema>
+    </schema>
 
-  </wsdl:types>
+  </wsdl:types>
 
-  <wsdl:message name="getBookRequest">
-    <wsdl:part element="wns:getBook" name="parameters"/>
-  </wsdl:message>
+  <wsdl:message name="getBookRequest">
+    <wsdl:part element="wns:getBook" name="parameters"/>
+  </wsdl:message>
 
-  <wsdl:message name="getBookResponse">
-    <wsdl:part element="wns:getBookResponse" name="parameters"/>
-  </wsdl:message>
+  <wsdl:message name="getBookResponse">
+    <wsdl:part element="wns:getBookResponse" name="parameters"/>
+  </wsdl:message>
 
-  <wsdl:message name="addBookRequest">
-    <wsdl:part element="wns:addBook" name="parameters"/>
-  </wsdl:message>
+  <wsdl:message name="addBookRequest">
+    <wsdl:part element="wns:addBook" name="parameters"/>
+  </wsdl:message>
   
-  <wsdl:message name="addBookResponse">
-    <wsdl:part element="wns:addBookResponse" name="parameters"/>
-  </wsdl:message>
-
-  <wsdl:portType name="Library">
-
-    <wsdl:operation name="getBook">
-      <wsdl:input message="wns:getBookRequest" name="getBookRequest"/>
-      <wsdl:output message="wns:getBookResponse" name="getBookResponse"/>
-    </wsdl:operation>
-
-    <wsdl:operation name="addBook">
-      <wsdl:input message="wns:addBookRequest" name="addBookRequest"/>
-      <wsdl:output message="wns:addBookResponse" name="addBookResponse"/>
-    </wsdl:operation>
+  <wsdl:message name="addBookResponse">
+    <wsdl:part element="wns:addBookResponse" name="parameters"/>
+  </wsdl:message>
+
+  <wsdl:portType name="Library">
+
+    <wsdl:operation name="getBook">
+      <wsdl:input message="wns:getBookRequest" name="getBookRequest"/>
+      <wsdl:output message="wns:getBookResponse" name="getBookResponse"/>
+    </wsdl:operation>
+
+    <wsdl:operation name="addBook">
+      <wsdl:input message="wns:addBookRequest" name="addBookRequest"/>
+      <wsdl:output message="wns:addBookResponse" name="addBookResponse"/>
+    </wsdl:operation>
 
-  </wsdl:portType>
+  </wsdl:portType>
   ...
-</wsdl:definitions>
-
+</wsdl:definitions>

This WSDL defines a service with just two operations: getBook and -addBook. The getBook operation takes a getBook element as -input, and returns a getBookResponse element as output, while +addBook. The getBook operation takes a getBook element +as input, and returns a getBookResponse element as output, while addBook takes an addBook element as input and returns an addBookResponse as output. Each of these input and output elements in -turn consists of a sequence of child elements, with some of the child elements -defined directly using standard schema types and others referencing user-defined -schema types.

+turn consists of a sequence of child elements, with some of the child +elements defined directly using standard schema types and others referencing +user-defined schema types.

As I said up front, this WSDL qualifies for unwrapped handling using JiBX. Here's the body of the client interface generated when using unwrapping (the -uw option for WSDL2Java):

- -
-    public interface LibraryJibxUnwrapped {
+
    public interface LibraryJibxUnwrapped {
           
              
         /**
@@ -158,67 +153,61 @@
 
         
        //
-       }
-
+ }

You can see that the JiBX code generation converted the operations into simple method call interfaces without introducing any extraneous objects (see -JiBX Document/Literal Example for the -interface generated when unwrapping is not used). The server-side interface is -the same.

+JiBX Document/Literal Example for +the interface generated when unwrapping is not used). The server-side +interface is the same.

The key points that allow unwrapped handling with JiBX are:

-
    -
  1. Each operation either accepts no input, or the input consists of a single -element.
  2. -
  3. Each input element is defined as a schema complexType consisting of a -sequence of any number of child elements.
  4. -
  5. Each operation either generates no output, or the output consists of a -single element.
  6. -
  7. Each output element is defined as a schema complexType consisting of a -sequence that's either empty or contains a single child element.
  8. -
  9. The child elements of both inputs and outputs are defined using type -references, rather than an embedded type definitions.
  10. +
  11. Each operation either accepts no input, or the input consists of a + single element.
  12. +
  13. Each input element is defined as a schema complexType consisting + of a sequence of any number of child elements.
  14. +
  15. Each operation either generates no output, or the output consists of a + single element.
  16. +
  17. Each output element is defined as a schema complexType + consisting of a sequence that's either empty or contains a single + child element.
  18. +
  19. The child elements of both inputs and outputs are defined using + type references, rather than an embedded type definitions.

You also need to supply an appropriate JiBX binding definition (using the --Ebindingfile {file} parameter for WSDL2Java - see -JiBX Codegen Integration - -WSDL2Java usage for more details). This must define abstract mappings -for the complexTypes referenced by child elements of the inputs and -outputs, with a type-name attribute matching the schema -complexType name. If the child elements reference schema simpleType -definitions the binding must also define a formats for each -simpleType, with a label attribute matching the schema +-Ebindingfile {file} parameter for WSDL2Java - see JiBX Codegen Integration - +WSDL2Java usage for more details). This must define abstract +mappings for the complexTypes referenced by child elements of +the inputs and outputs, with a type-name attribute matching the schema +complexType name. If the child elements reference schema +simpleType definitions the binding must also define a formats +for each simpleType, with a label attribute matching the schema simpleType name. The binding definition must also specify the force-classes='true' attribute on the binding element.

For example, here's a binding definition that matches the above WSDL:

+
<binding force-classes="true" xmlns:tns="http://ws.sosnoski.com/library/types">
 
-
-<binding force-classes="true" xmlns:tns="http://ws.sosnoski.com/library/types">
-
-  <namespace uri="http://ws.sosnoski.com/library/types" default="elements"/>
+  <namespace uri="http://ws.sosnoski.com/library/types" default="elements"/>
   
   <mapping abstract="true" class="com.sosnoski.ws.library.jibx.beans.Book"
-      type-name="tns:BookInformation">
-    <value name="type" style="attribute" field="m_type"/>
-    <value name="isbn" style="attribute" field="m_isbn"/>
-    <collection field="m_authors">
-      <value name="author"/>
-    </collection>
-    <value name="title" field="m_title"/>
-  </mapping>
+      type-name="tns:BookInformation">
+    <value name="type" style="attribute" field="m_type"/>
+    <value name="isbn" style="attribute" field="m_isbn"/>
+    <collection field="m_authors">
+      <value name="author"/>
+    </collection>
+    <value name="title" field="m_title"/>
+  </mapping>
   
-</binding>
-
+</binding>

And here's the actual com.sosnoski.ws.library.jibx.beans.Book class:

- -
-package com.sosnoski.ws.library.jibx.beans;
+
package com.sosnoski.ws.library.jibx.beans;
 
 public class Book
 {
@@ -244,8 +233,7 @@
     public String[] getAuthors() {
         return m_authors;
     }
-}
-
+}

The JiBX code generation for Axis2 currently requires that classes coresponding to unwrapped child elements (such as @@ -253,12 +241,11 @@ public default (no-argument) constructors.

JiBX handling allows the child elements of both inputs and outputs to be -optional (with nillable='true', minOccurs='0', or both), providing -the binding converts these child elements to object types rather than primitive -types. It also allows repeated child elements (with +optional (with nillable='true', minOccurs='0', or both), +providing the binding converts these child elements to object types rather +than primitive types. It also allows repeated child elements (with minOccurs='unbounded', or any value of minOccurs greater than -one), representing the repeated elements as arrays of the corresponding object -or primitive types.

- +one), representing the repeated elements as arrays of the corresponding +object or primitive types.

--------------------------------------------------------------------- To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org For additional commands, e-mail: axis-cvs-help@ws.apache.org