<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20210801" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; JiBX general document/literal</title>
    <link rel="stylesheet" href="../../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../../css/site.css" />
    <link rel="stylesheet" href="../../css/print.css" media="print" />
      <script type="text/javascript" src="../../js/apache-maven-fluido-1.6.min.js"></script>
<meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" />      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/></a></div>
        <div class="pull-right"><a href="../.././" id="bannerRight"><img src="../../images/axis.jpg" /></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2021-08-01<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.0<span class="divider">|</span></li>
        <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
    <li class="active ">JiBX general document/literal</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Axis2/Java</li>
    <li><a href="../../index.html" title="Home"><span class="none"></span>Home</a>  </li>
    <li><a href="../../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
    <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
      <ul class="nav nav-list">
    <li><a href="../../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a>  </li>
    <li><a href="../../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a>  </li>
    <li><a href="../../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a>  </li>
    <li><a href="../../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a>  </li>
    <li><a href="../../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a>  </li>
    <li><a href="../../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a>  </li>
      </ul>
  </li>
    <li><a href="../../modules/index.html" title="Modules"><span class="none"></span>Modules</a>  </li>
    <li><a href="../../tools/index.html" title="Tools"><span class="none"></span>Tools</a>  </li>
          <li class="nav-header">Documentation</li>
    <li><a href="../../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a>  </li>
    <li><a href="../../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a>  </li>
    <li><a href="../../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a>  </li>
    <li><a href="../../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a>  </li>
    <li><a href="../../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a>  </li>
    <li><a href="../../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a>  </li>
    <li><a href="../../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a>  </li>
    <li><a href="../../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a>  </li>
    <li><a href="../../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a>  </li>
          <li class="nav-header">Resources</li>
    <li><a href="../../faq.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
    <li><a href="../../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
    <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a>  </li>
    <li><a href="../../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a>  </li>
    <li><a href="../../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a>  </li>
          <li class="nav-header">Get Involved</li>
    <li><a href="../../overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
    <li><a href="../../svn.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a>  </li>
    <li><a href="../../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a>  </li>
    <li><a href="../../release-process.html" title="Release Process"><span class="none"></span>Release Process</a>  </li>
    <li><a href="../../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a>  </li>
    <li><a href="../../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a>  </li>
          <li class="nav-header">Project Information</li>
    <li><a href="../../team-list.html" title="Project Team"><span class="none"></span>Project Team</a>  </li>
    <li><a href="../../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a>  </li>
    <li><a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a>  </li>
    <li><a href="../../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a>  </li>
          <li class="nav-header">Apache</li>
    <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
    <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<html xmlns="http://www.w3.org/1999/xhtml">


<h1>JiBX general document/literal</h1>

<p>Code generation for JiBX data binding converts operations
defined by a Web service to method calls. With general
document/literal (doc/lit) Web services the generated methods each
take a single parameter object and return a single result object.
Here's a sample doc/lit WSDL (partial) by way of an example:</p>

<div>
<pre>
&lt;wsdl:definitions targetNamespace=&quot;http://ws.sosnoski.com/library/wsdl&quot;
    xmlns:tns=&quot;http://ws.sosnoski.com/library/types&quot;
    xmlns:wsdl=&quot;http://schemas.xmlsoap.org/wsdl/&quot;
    xmlns:wsdlsoap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot;&gt;
    
  &lt;wsdl:types&gt;
  
    &lt;schema elementFormDefault=&quot;qualified&quot;
        targetNamespace=&quot;http://ws.sosnoski.com/library/types&quot;
        xmlns=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
        
      &lt;element name=&quot;getBook&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;isbn&quot; type=&quot;string&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;element name=&quot;getBookResponse&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;book&quot; minOccurs=&quot;0&quot; type=&quot;tns:BookInformation&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;element name=&quot;addBook&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;type&quot; type=&quot;string&quot;/&gt;
            &lt;element name=&quot;isbn&quot; type=&quot;string&quot;/&gt;
            &lt;element name=&quot;author&quot; minOccurs=&quot;0&quot; maxOccurs=&quot;unbounded&quot; type=&quot;string&quot;/&gt;
            &lt;element name=&quot;title&quot; type=&quot;string&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;element name=&quot;addBookResponse&quot;&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name=&quot;success&quot; type=&quot;boolean&quot;/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;complexType name=&quot;BookInformation&quot;&gt;
        &lt;sequence&gt;
          &lt;element name=&quot;author&quot; minOccurs=&quot;0&quot; maxOccurs=&quot;unbounded&quot; type=&quot;string&quot;/&gt;
          &lt;element name=&quot;title&quot; type=&quot;string&quot;/&gt;
        &lt;/sequence&gt;
        &lt;attribute name=&quot;type&quot; use=&quot;required&quot; type=&quot;string&quot;/&gt;
        &lt;attribute name=&quot;isbn&quot; use=&quot;required&quot; type=&quot;string&quot;/&gt;
      &lt;/complexType&gt;
      
    &lt;/schema&gt;

  &lt;/wsdl:types&gt;

  &lt;wsdl:message name=&quot;getBookRequest&quot;&gt;
    &lt;wsdl:part element=&quot;wns:getBook&quot; name=&quot;parameters&quot;/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:message name=&quot;getBookResponse&quot;&gt;
    &lt;wsdl:part element=&quot;wns:getBookResponse&quot; name=&quot;parameters&quot;/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:message name=&quot;addBookRequest&quot;&gt;
    &lt;wsdl:part element=&quot;wns:addBook&quot; name=&quot;parameters&quot;/&gt;
  &lt;/wsdl:message&gt;
  
  &lt;wsdl:message name=&quot;addBookResponse&quot;&gt;
    &lt;wsdl:part element=&quot;wns:addBookResponse&quot; name=&quot;parameters&quot;/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:portType name=&quot;Library&quot;&gt;

    &lt;wsdl:operation name=&quot;getBook&quot;&gt;
      &lt;wsdl:input message=&quot;wns:getBookRequest&quot; name=&quot;getBookRequest&quot;/&gt;
      &lt;wsdl:output message=&quot;wns:getBookResponse&quot; name=&quot;getBookResponse&quot;/&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name=&quot;addBook&quot;&gt;
      &lt;wsdl:input message=&quot;wns:addBookRequest&quot; name=&quot;addBookRequest&quot;/&gt;
      &lt;wsdl:output message=&quot;wns:addBookResponse&quot; name=&quot;addBookResponse&quot;/&gt;
    &lt;/wsdl:operation&gt;

  &lt;/wsdl:portType&gt;
  ...
&lt;/wsdl:definitions&gt;
</pre></div>

<p>This WSDL defines a service with just two operations:
<b>getBook</b> and <b>addBook</b>. The <b>getBook</b> operation
takes a <i>getBook</i> element as input, and returns a
<i>getBookResponse</i> element as output, while <b>addBook</b>
takes an <i>addBook</i> element as input and returns an
<i>addBookResponse</i> as output. Here's the body of the client
interface generated by the standard JiBX code generation:</p>

<div>
<pre>
    public interface LibraryJibxUnwrapped {
          
             
        /**
         * Auto generated method signatures
         * @param addBook
         */
         public com.sosnoski.ws.library.jibx.wrappers.AddBookResponse addBook(
         com.sosnoski.ws.library.jibx.wrappers.AddBookRequest addBook) throws java.rmi.RemoteException
          
                       
             ;
             
             
        /**
         * Auto generated method signatures
         * @param getBook
         */
         public com.sosnoski.ws.library.jibx.wrappers.GetBookResponse getBook(
         com.sosnoski.ws.library.jibx.wrappers.GetBookRequest getBook) throws java.rmi.RemoteException
          
                       
             ;
             

        
       //
       }
</pre></div>

<p>You can see that the JiBX code generation converted the
operations into simple method call interfaces using objects
corresponding to the input and output elements of the operation
(see <a href="./jibx-unwrapped-example.html">JiBX Unwrapped
Example</a> for the interface generated when unwrapping is instead
used). The server-side interface is the same.</p>

<p>You need to supply an appropriate JiBX binding definition for
use in code generation (using the <i>-Ebindingfile {file}</i>
parameter for WSDL2Java - see <a href="./jibx-codegen-integration.html#codegen">JiBX Codegen Integration
- WSDL2Java usage</a> for more details). This must define concrete
<i>mappings</i> for each element used as the input or output of an
operation. The JiBX code generation extension matches the element
names to the binding in order to determine the corresponding class
to use in generated code.</p>

<p>For example, here's a binding definition that matches the above
WSDL:</p>

<div>
<pre>
&lt;binding add-constructors=&quot;true&quot;&gt;

  &lt;namespace uri=&quot;http://ws.sosnoski.com/library/types&quot; default=&quot;elements&quot;/&gt;
  
  &lt;mapping name=&quot;getBook&quot;
      class=&quot;com.sosnoski.ws.library.jibx.wrappers.GetBookRequest&quot;&gt;
    &lt;value name=&quot;isbn&quot; field=&quot;m_isbn&quot;/&gt;
  &lt;/mapping&gt;
  
  &lt;mapping name=&quot;getBookResponse&quot;
      class=&quot;com.sosnoski.ws.library.jibx.wrappers.GetBookResponse&quot;&gt;
    &lt;structure name=&quot;book&quot; field=&quot;m_book&quot;/&gt;
  &lt;/mapping&gt;
  
  &lt;mapping name=&quot;addBook&quot;
      class=&quot;com.sosnoski.ws.library.jibx.wrappers.AddBookRequest&quot;&gt;
    &lt;structure field=&quot;m_book&quot;&gt;
      &lt;value name=&quot;type&quot; field=&quot;m_type&quot;/&gt;
      &lt;value name=&quot;isbn&quot; field=&quot;m_isbn&quot;/&gt;
      &lt;collection field=&quot;m_authors&quot;&gt;
        &lt;value name=&quot;author&quot; type=&quot;java.lang.String&quot;/&gt;
      &lt;/collection&gt;
      &lt;value name=&quot;title&quot; field=&quot;m_title&quot;/&gt;
    &lt;/structure&gt;
  &lt;/mapping&gt;
  
  &lt;mapping name=&quot;addBookResponse&quot;
      class=&quot;com.sosnoski.ws.library.jibx.wrappers.AddBookResponse&quot;/&gt;
  
  &lt;mapping abstract=&quot;true&quot; class=&quot;com.sosnoski.ws.library.jibx.beans.Book&quot;&gt;
    &lt;value name=&quot;type&quot; style=&quot;attribute&quot; field=&quot;m_type&quot;/&gt;
    &lt;value name=&quot;isbn&quot; style=&quot;attribute&quot; field=&quot;m_isbn&quot;/&gt;
    &lt;collection field=&quot;m_authors&quot;&gt;
      &lt;value name=&quot;author&quot; type=&quot;java.lang.String&quot;/&gt;
    &lt;/collection&gt;
    &lt;value name=&quot;title&quot; field=&quot;m_title&quot;/&gt;
  &lt;/mapping&gt;

&lt;/binding&gt;
</pre></div>

<p>And here are the actual data object classes:</p>

<div>
<pre>
package com.sosnoski.ws.library.jibx.wrappers;

import com.sosnoski.ws.library.jibx.beans.Book;

public class AddBookRequest
{
    private Book m_book;
    
    public AddBookRequest(Book book) {
        m_book = book;
    }
    
    public Book getBook() {
        return m_book;
    }
}

public class AddBookResponse
{
}

public class GetBookRequest
{
    private String m_isbn;
    
    public GetBookRequest(String isbn) {
        m_isbn = isbn;
    }

    public String getIsbn() {
        return m_isbn;
    }
}

public class GetBookResponse
{
    private Book m_book;
    
    public GetBookResponse(Book book) {
        m_book = book;
    }
    
    public Book getBook() {
        return m_book;
    }
}

package com.sosnoski.ws.library.jibx.beans;

public class Book
{
    private String m_type;
    private String m_isbn;
    private String m_title;
    private String[] m_authors;
    
    public Book() {}

    public String getType() {
        return m_type;
    }
    
    public String getIsbn() {
        return m_isbn;
    }
    
    public String getTitle() {
        return m_title;
    }
    
    public String[] getAuthors() {
        return m_authors;
    }
}
</pre></div>

</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>