You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ds...@apache.org on 2007/05/18 13:58:37 UTC

svn commit: r539405 - in /webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx: CodeGenerationUtility.java JiBXDataSource.java template/JibXDatabindingTemplate.xsl

Author: dsosnoski
Date: Fri May 18 04:58:36 2007
New Revision: 539405

URL: http://svn.apache.org/viewvc?view=rev&rev=539405
Log:
AXIS2-2670 - simpleType reference with unwrapped
AXIS2-2669 - JiBX serialization can generate malformed XML
AXIS2-2453 - JiBX creates illegal parameter names with dashes/hyphens

Modified:
    webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/CodeGenerationUtility.java
    webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/JiBXDataSource.java
    webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/template/JibXDatabindingTemplate.xsl

Modified: webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/CodeGenerationUtility.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/CodeGenerationUtility.java?view=diff&rev=539405&r1=539404&r2=539405
==============================================================================
--- webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/CodeGenerationUtility.java (original)
+++ webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/CodeGenerationUtility.java Fri May 18 04:58:36 2007
@@ -34,6 +34,8 @@
 import org.apache.ws.commons.schema.XmlSchemaParticle;
 import org.apache.ws.commons.schema.XmlSchemaSequence;
 import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaSimpleTypeContent;
+import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
 import org.apache.ws.commons.schema.XmlSchemaType;
 import org.jibx.binding.model.BindingElement;
 import org.jibx.binding.model.ElementBase;
@@ -764,7 +766,8 @@
                     nons = nons || itemname.getNamespaceURI().length() == 0;
                     param.setAttribute("ns", itemname.getNamespaceURI());
                     param.setAttribute("name", itemname.getLocalPart());
-                    param.setAttribute("java-name", toJavaName(itemname.getLocalPart(), nameset));
+                    String javaname = toJavaName(itemname.getLocalPart(), nameset);
+                    param.setAttribute("java-name", javaname);
                     param.setAttribute("nillable", Boolean.toString(element.isNillable()));
                     boolean optional = element.getMinOccurs() == 0;
                     param.setAttribute("optional", Boolean.toString(optional));
@@ -777,9 +780,24 @@
                         // simple type translates to format element in binding
                         FormatElement format = (FormatElement)simpleTypeMap.get(typename);
                         if (format == null) {
+                            
+                            // check for restriction with simple base, and treat as base if so
+                            XmlSchemaSimpleType stype = (XmlSchemaSimpleType)element.getSchemaType();
+                            XmlSchemaSimpleTypeContent content = stype.getContent();
+                            if (content instanceof XmlSchemaSimpleTypeRestriction) {
+                                QName tname = ((XmlSchemaSimpleTypeRestriction)content).getBaseTypeName();
+                                if (SCHEMA_NAMESPACE.equals(tname.getNamespaceURI())) {
+                                    format = (FormatElement)simpleTypeMap.get(tname);
+                                    if (format != null) {
+                                        typename = tname;
+                                    }
+                                }
+                            }
+                        }
+                        if (format == null) {
                             throw new RuntimeException("Cannot unwrap element " +
-                                    qname + ": no format definition found for type " +
-                                    typename + " (used by element " + itemname + ')');
+                                qname + ": no format definition found for type " +
+                                typename + " (used by element " + itemname + ')');
                         }
                         javatype = format.getTypeName();
                         param.setAttribute("form", "simple");
@@ -898,7 +916,7 @@
                     //  it's used here to fit into the ADB-based code generation model
                     QName partqname = WSDLUtil.getPartQName(opName.getLocalPart(),
                                                             WSDLConstants.INPUT_PART_QNAME_SUFFIX,
-                                                            itemname.getLocalPart());
+                                                            javaname);
                     partNameList.add(partqname);
 
                     // add type mapping so we look like ADB
@@ -1064,6 +1082,8 @@
                 bindingMap.put(format, binding);
 
             } else if (child.type() == ElementBase.MAPPING_ELEMENT) {
+                
+                // record only abstract mappings with type names, and mappings with names
                 MappingElement mapping = (MappingElement)child;
                 bindingMap.put(mapping, binding);
                 if (mapping.isAbstract() && mapping.getTypeQName() != null) {
@@ -1072,9 +1092,7 @@
                     registerElement(mapping.getTypeQName(), mapping,
                                     complexTypeMap);
 
-                } else if (mapping.getName() == null) {
-                    throw new RuntimeException("Non-abstract mapping for class " + mapping.getClassName() + " needs element name.");
-                } else {
+                } else if (mapping.getName() != null) {
 
                     // register concrete mappings as element conversions
                     String uri = mapping.getUri();

Modified: webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/JiBXDataSource.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/JiBXDataSource.java?view=diff&rev=539405&r1=539404&r2=539405
==============================================================================
--- webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/JiBXDataSource.java (original)
+++ webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/JiBXDataSource.java Fri May 18 04:58:36 2007
@@ -45,9 +45,15 @@
 
     /** Element name (only used with {@link #marshallerIndex}). */
     private final String elementName;
+    
+    /** Element namespace URI (only used with {@link #marshallerIndex}). */
+    private final String elementNamespace;
 
     /** Element namespace prefix (only used with {@link #marshallerIndex}). */
     private final String elementNamespacePrefix;
+    
+    /** Element namespace index (only used with {@link #marshallerIndex}). */
+    private final int elementNamespaceIndex;
 
     /** Indexes of namespaces to be opened (only used with {@link #marshallerIndex}). */
     private final int[] openNamespaceIndexes;
@@ -71,7 +77,8 @@
         marshallerIndex = -1;
         dataObject = obj;
         bindingFactory = factory;
-        elementName = elementNamespacePrefix = null;
+        elementName = elementNamespace = elementNamespacePrefix = null;
+        elementNamespaceIndex = -1;
         openNamespaceIndexes = null;
         openNamespacePrefixes = null;
     }
@@ -82,54 +89,105 @@
      * @param obj
      * @param index
      * @param name
+     * @param uri
      * @param prefix
      * @param nsindexes
      * @param nsprefixes
      * @param factory
      */
-    public JiBXDataSource(Object obj, int index, String name, String prefix,
+    public JiBXDataSource(Object obj, int index, String name, String uri, String prefix,
                           int[] nsindexes, String[] nsprefixes, IBindingFactory factory) {
         if (index < 0) {
             throw new
                     IllegalArgumentException("index value must be non-negative");
         }
         marshallerIndex = index;
+        dataObject = obj;
+        bindingFactory = factory;
+        boolean found = false;
+        String[] nss = factory.getNamespaces();
+        int nsidx = -1;
+        for (int i = 0; i < nsindexes.length; i++) {
+            if (uri.equals(nss[nsindexes[i]])) {
+                nsidx = nsindexes[i];
+                prefix = nsprefixes[i];
+                found = true;
+                break;
+            }
+        }
         elementName = name;
+        elementNamespace = uri;
         elementNamespacePrefix = prefix;
+        if (!found) {
+            for (int i = 0; i < nss.length; i++) {
+                if (uri.equals(nss[i])) {
+                    nsidx = i;
+                    break;
+                }
+            }
+            if (nsidx >= 0) {
+                int[] icpy = new int[nsindexes.length+1];
+                icpy[0] = nsidx;
+                System.arraycopy(nsindexes, 0, icpy, 1, nsindexes.length);
+                nsindexes = icpy;
+                String[] scpy = new String[nsprefixes.length+1];
+                scpy[0] = prefix;
+                System.arraycopy(nsprefixes, 0, scpy, 1, nsprefixes.length);
+                nsprefixes = scpy;
+            } else {
+                throw new IllegalStateException("Namespace not found");
+            }
+        }
+        elementNamespaceIndex = nsidx;
         openNamespaceIndexes = nsindexes;
         openNamespacePrefixes = nsprefixes;
-        dataObject = obj;
-        bindingFactory = factory;
     }
 
     /**
-     * Internal method to handle the actual marshalling.
-     *
+     * Internal method to handle the actual marshalling. If the source object is marshallable it's
+     * it's just marshalled directly, without worrying about redundant namespace declarations and
+     * such. If it needs to be handled with an abstract mapping, the handling is determined by the
+     * 'full' flag. When this is <code>true</code> all namespaces are declared directly, while if
+     * <code>false</code> the namespaces must have previously been declared on some enclosing
+     * element of the output. This allows the normal case of marshalling within the context of a
+     * SOAP message to be handled efficiently, while still generating correct XML if the element is
+     * marshalled directly (as when building the AXIOM representation for use by WS-Security).
+     * 
+     * @param full
      * @param ctx
      * @throws JiBXException
      */
-    private void marshal(IMarshallingContext ctx) throws JiBXException {
+    private void marshal(boolean full, IMarshallingContext ctx) throws JiBXException {
         try {
             
             if (marshallerIndex < 0) {
                 ((IMarshallable)dataObject).marshal(ctx);
             } else {
-    
-                // open namespaces from wrapper element
                 IXMLWriter wrtr = ctx.getXmlWriter();
-                wrtr.openNamespaces(openNamespaceIndexes, openNamespacePrefixes);
                 String name = elementName;
-                if (!"".equals(elementNamespacePrefix)) {
-                    name = elementNamespacePrefix + ':' + name;
+                int nsidx = 0;
+                if (full) {
+                    
+                    // declare all namespaces on start tag
+                    nsidx = elementNamespaceIndex;
+                    wrtr.startTagNamespaces(nsidx, name, openNamespaceIndexes, openNamespacePrefixes);
+                    
+                } else {
+        
+                    // configure writer with namespace declared in enclosing scope
+                    wrtr.openNamespaces(openNamespaceIndexes, openNamespacePrefixes);
+                    if (!"".equals(elementNamespacePrefix)) {
+                        name = elementNamespacePrefix + ':' + name;
+                    }
+                    wrtr.startTagOpen(0, name);
                 }
-                wrtr.startTagOpen(0, name);
-    
+                
                 // marshal object representation (may include attributes) into element
                 IMarshaller mrsh = ctx.getMarshaller(marshallerIndex,
                                                      bindingFactory
                                                              .getMappedClasses()[marshallerIndex]);
                 mrsh.marshal(dataObject, ctx);
-                wrtr.endTag(0, name);
+                wrtr.endTag(nsidx, name);
             }
             ctx.getXmlWriter().flush();
 
@@ -143,10 +201,12 @@
      */
     public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException {
         try {
+            
+            // marshal with all namespace declarations, since external state unknown
             IMarshallingContext ctx = bindingFactory.createMarshallingContext();
-            ctx.setOutput(output,
-                          format == null ? null : format.getCharSetEncoding());
-            marshal(ctx);
+            ctx.setOutput(output, format == null ? null : format.getCharSetEncoding());
+            marshal(true, ctx);
+            
         } catch (JiBXException e) {
             throw new XMLStreamException("Error in JiBX marshalling", e);
         }
@@ -157,9 +217,12 @@
      */
     public void serialize(Writer writer, OMOutputFormat format) throws XMLStreamException {
         try {
+            
+            // marshal with all namespace declarations, since external state unknown
             IMarshallingContext ctx = bindingFactory.createMarshallingContext();
             ctx.setOutput(writer);
-            marshal(ctx);
+            marshal(true, ctx);
+            
         } catch (JiBXException e) {
             throw new XMLStreamException("Error in JiBX marshalling", e);
         }
@@ -170,11 +233,31 @@
      */
     public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException {
         try {
-            IXMLWriter writer = new StAXWriter(bindingFactory.getNamespaces(),
-                                               xmlWriter);
+            
+            // check if namespaces already declared for abstract mapping
+            boolean full = true;
+            String[] nss = bindingFactory.getNamespaces();
+            if (marshallerIndex >= 0) {
+                String prefix = xmlWriter.getPrefix(elementNamespace);
+                if (elementNamespacePrefix.equals(prefix)) {
+                    full = false;
+                    for (int i = 0; i < openNamespaceIndexes.length; i++) {
+                        String uri = nss[i];
+                        prefix = xmlWriter.getPrefix(uri);
+                        if (!openNamespacePrefixes[i].equals(prefix)) {
+                            full = true;
+                            break;
+                        }
+                    }
+                }
+            }
+            
+            // marshal with all namespace declarations, since external state unknown
+            IXMLWriter writer = new StAXWriter(nss, xmlWriter);
             IMarshallingContext ctx = bindingFactory.createMarshallingContext();
             ctx.setXmlWriter(writer);
-            marshal(ctx);
+            marshal(full, ctx);
+            
         } catch (JiBXException e) {
             throw new XMLStreamException("Error in JiBX marshalling", e);
         }

Modified: webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/template/JibXDatabindingTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/template/JibXDatabindingTemplate.xsl?view=diff&rev=539405&r1=539404&r2=539405
==============================================================================
--- webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/template/JibXDatabindingTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/jibx/src/org/apache/axis2/jibx/template/JibXDatabindingTemplate.xsl Fri May 18 04:58:36 2007
@@ -87,13 +87,7 @@
                 if (bindingFactory == null) {
                     throw new RuntimeException(bindingErrorMessage);
                 }
-                org.jibx.runtime.IMarshallable marshallable =
-                    (org.jibx.runtime.IMarshallable)param;
-                int index = marshallable.JiBX_getIndex();
-                org.apache.axis2.jibx.JiBXDataSource source =
-                    new org.apache.axis2.jibx.JiBXDataSource(marshallable, bindingFactory);
-                org.apache.axiom.om.OMNamespace namespace = factory.createOMNamespace(bindingFactory.getElementNamespaces()[index], null);
-                return factory.createOMElement(source, bindingFactory.getElementNames()[index], namespace);
+                return (mappedChild(param, factory));
             } else if (param == null) {
                 throw new RuntimeException("Cannot bind null value of type <xsl:value-of select="@type"/>");
             } else {
@@ -185,15 +179,15 @@
                           }
             <xsl:choose>
               <xsl:when test="out-wrapper/return-element/@form='complex' and out-wrapper/return-element/@type-index=''">
-                          org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource((org.jibx.runtime.IMarshallable)result, bindingFactory);
+                          wrapper.addChild(mappedChild(result, factory));
               </xsl:when>
               <xsl:otherwise>
-                          org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(result, _type_index<xsl:value-of select="out-wrapper/return-element/@type-index"/>, "<xsl:value-of select='out-wrapper/return-element/@name'/>", "<xsl:value-of select='out-wrapper/return-element/@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
-              </xsl:otherwise>
-            </xsl:choose>
+                          org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(result, _type_index<xsl:value-of select="out-wrapper/return-element/@type-index"/>, "<xsl:value-of select='out-wrapper/return-element/@name'/>", "<xsl:value-of select='out-wrapper/return-element/@ns'/>", "<xsl:value-of select='out-wrapper/return-element/@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
                           org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace("<xsl:value-of select='out-wrapper/return-element/@ns'/>", "");
                           org.apache.axiom.om.OMElement child = factory.createOMElement(src, "<xsl:value-of select='out-wrapper/return-element/@name'/>", appns);
                           wrapper.addChild(child);
+              </xsl:otherwise>
+            </xsl:choose>
                       }
                   }
           </xsl:when>
@@ -257,15 +251,15 @@
                   }
             <xsl:choose>
               <xsl:when test="out-wrapper/return-element/@form='complex' and out-wrapper/return-element/@type-index=''">
-                  org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource((org.jibx.runtime.IMarshallable)result, bindingFactory);
+                  wrapper.addChild(mappedChild(result, factory));
               </xsl:when>
               <xsl:otherwise>
-                  org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(result, _type_index<xsl:value-of select="out-wrapper/return-element/@type-index"/>, "<xsl:value-of select='out-wrapper/return-element/@name'/>", "<xsl:value-of select='out-wrapper/return-element/@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
-              </xsl:otherwise>
-            </xsl:choose>
+                  org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(result, _type_index<xsl:value-of select="out-wrapper/return-element/@type-index"/>, "<xsl:value-of select='out-wrapper/return-element/@name'/>", "<xsl:value-of select='out-wrapper/return-element/@ns'/>", "<xsl:value-of select='out-wrapper/return-element/@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
                   org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace("<xsl:value-of select='out-wrapper/return-element/@ns'/>", "");
                   org.apache.axiom.om.OMElement child = factory.createOMElement(src, "<xsl:value-of select='out-wrapper/return-element/@name'/>", appns);
                   wrapper.addChild(child);
+              </xsl:otherwise>
+            </xsl:choose>
               }
           </xsl:when>
           <xsl:otherwise>
@@ -615,15 +609,13 @@
         if (bindingFactory == null) {
             throw new RuntimeException(bindingErrorMessage);
         }
-        org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource((org.jibx.runtime.IMarshallable)<xsl:call-template name="parameter-or-array-item"/>, bindingFactory);
-        org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace("<xsl:value-of select='@ns'/>", "");
-        child = factory.createOMElement(src, "<xsl:value-of select='@name'/>", appns);
+        child = mappedChild(<xsl:call-template name="parameter-or-array-item"/>, factory);
       </xsl:when>
       <xsl:when test="@form='complex'">
         if (bindingFactory == null) {
             throw new RuntimeException(bindingErrorMessage);
         }
-        org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(<xsl:call-template name="parameter-or-array-item"/>, _type_index<xsl:value-of select="@type-index"/>, "<xsl:value-of select='@name'/>", "<xsl:value-of select='@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
+        org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(<xsl:call-template name="parameter-or-array-item"/>, _type_index<xsl:value-of select="@type-index"/>, "<xsl:value-of select='@name'/>", "<xsl:value-of select='@ns'/>", "<xsl:value-of select='@prefix'/>", bindingNamespaceIndexes, bindingNamespacePrefixes, bindingFactory);
         org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace("<xsl:value-of select='@ns'/>", "");
         child = factory.createOMElement(src, "<xsl:value-of select='@name'/>", appns);
       </xsl:when>
@@ -652,69 +644,69 @@
   -->
   <!-- Called by main template to create utility methods -->
   <xsl:template name="stub-utility-methods">
-        
-        private Exception convertException(Exception ex) throws java.rmi.RemoteException {
-            if (ex instanceof org.apache.axis2.AxisFault) {
-                org.apache.axis2.AxisFault f = (org.apache.axis2.AxisFault)ex;
-                org.apache.axiom.om.OMElement faultElt = f.getDetail();
-                if (faultElt != null) {
-                    if (faultExceptionNameMap.containsKey(faultElt.getQName())) {
-                        try {
-                            
-                            // first create the actual exception
-                            String exceptionClassName = (String)faultExceptionClassNameMap.get(faultElt.getQName());
-                            Class exceptionClass = Class.forName(exceptionClassName);
-                            Exception e = (Exception)exceptionClass.newInstance();
-                            
-                            // build the message object from the details
-                            String messageClassName = (String)faultMessageMap.get(faultElt.getQName());
-                            Class messageClass = Class.forName(messageClassName);
-                            Object messageObject = fromOM(faultElt, messageClass, null);
-                            java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage",
-                                new Class[] { messageClass });
-                            m.invoke(e, new Object[] { messageObject });
-                            return e;
-                            
-                        } catch (ClassCastException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        } catch (ClassNotFoundException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        } catch (NoSuchMethodException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        } catch (java.lang.reflect.InvocationTargetException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        } catch (IllegalAccessException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        } catch (InstantiationException e) {
-                            // we cannot intantiate the class - throw the original
-                            // Axis fault
-                            throw f;
-                        }
-                    } else {
+    
+    private Exception convertException(Exception ex) throws java.rmi.RemoteException {
+        if (ex instanceof org.apache.axis2.AxisFault) {
+            org.apache.axis2.AxisFault f = (org.apache.axis2.AxisFault)ex;
+            org.apache.axiom.om.OMElement faultElt = f.getDetail();
+            if (faultElt != null) {
+                if (faultExceptionNameMap.containsKey(faultElt.getQName())) {
+                    try {
+                        
+                        // first create the actual exception
+                        String exceptionClassName = (String)faultExceptionClassNameMap.get(faultElt.getQName());
+                        Class exceptionClass = Class.forName(exceptionClassName);
+                        Exception e = (Exception)exceptionClass.newInstance();
+                        
+                        // build the message object from the details
+                        String messageClassName = (String)faultMessageMap.get(faultElt.getQName());
+                        Class messageClass = Class.forName(messageClassName);
+                        Object messageObject = fromOM(faultElt, messageClass, null);
+                        java.lang.reflect.Method m = exceptionClass.getMethod("setFaultMessage",
+                            new Class[] { messageClass });
+                        m.invoke(e, new Object[] { messageObject });
+                        return e;
+                        
+                    } catch (ClassCastException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
+                        throw f;
+                    } catch (ClassNotFoundException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
+                        throw f;
+                    } catch (NoSuchMethodException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
+                        throw f;
+                    } catch (java.lang.reflect.InvocationTargetException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
+                        throw f;
+                    } catch (IllegalAccessException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
+                        throw f;
+                    } catch (InstantiationException e) {
+                        // we cannot intantiate the class - throw the original
+                        // Axis fault
                         throw f;
                     }
                 } else {
                     throw f;
                 }
-                
-            } else if (ex instanceof RuntimeException) {
-                throw (RuntimeException)ex;
-            } else if (ex instanceof java.rmi.RemoteException) {
-                throw (java.rmi.RemoteException)ex;
             } else {
-                throw org.apache.axis2.AxisFault.makeFault(ex);
+                throw f;
             }
+            
+        } else if (ex instanceof RuntimeException) {
+            throw (RuntimeException)ex;
+        } else if (ex instanceof java.rmi.RemoteException) {
+            throw (java.rmi.RemoteException)ex;
+        } else {
+            throw org.apache.axis2.AxisFault.makeFault(ex);
         }
+    }
     
   </xsl:template>
   
@@ -726,110 +718,118 @@
   <!-- Called by main template to handle static binding data and methods. -->
   <xsl:template match="initialize-binding">
     <xsl:variable name="nscount" select="count(binding-namespace)"/>
-      private static final org.jibx.runtime.IBindingFactory bindingFactory;
-      private static final String bindingErrorMessage;
-      private static final int[] bindingNamespaceIndexes;
-      private static final String[] bindingNamespacePrefixes;
+    private static final org.jibx.runtime.IBindingFactory bindingFactory;
+    private static final String bindingErrorMessage;
+    private static final int[] bindingNamespaceIndexes;
+    private static final String[] bindingNamespacePrefixes;
     <xsl:apply-templates mode="generate-index-fields" select="abstract-type"/>
-        static {
-            org.jibx.runtime.IBindingFactory factory = null;
-            String message = null;
-            try {
+    static {
+        org.jibx.runtime.IBindingFactory factory = null;
+        String message = null;
+        try {
     <xsl:choose>
       <xsl:when test="string-length(normalize-space(@binding-name)) > 0">
-                factory = org.jibx.runtime.BindingDirectory.getFactory("<xsl:value-of select="@binding-name"/>", "<xsl:value-of select="@binding-package"/>", <xsl:choose><xsl:when test="string-length(normalize-space(/class/@name))>0"><xsl:value-of select="/class/@name"/></xsl:when><xsl:otherwise><xsl:value-of select="/interface/@name"/></xsl:otherwise></xsl:choose>.class.getClassLoader());
+            factory = org.jibx.runtime.BindingDirectory.getFactory("<xsl:value-of select="@binding-name"/>", "<xsl:value-of select="@binding-package"/>", <xsl:choose><xsl:when test="string-length(normalize-space(/class/@name))>0"><xsl:value-of select="/class/@name"/></xsl:when><xsl:otherwise><xsl:value-of select="/interface/@name"/></xsl:otherwise></xsl:choose>.class.getClassLoader());
       </xsl:when>
       <xsl:when test="string-length(normalize-space(@bound-class)) > 0">
-                factory = org.jibx.runtime.BindingDirectory.getFactory(<xsl:value-of select="@bound-class"/>.class);
+            factory = org.jibx.runtime.BindingDirectory.getFactory(<xsl:value-of select="@bound-class"/>.class);
       </xsl:when>
       <xsl:otherwise>
-                factory = new org.apache.axis2.jibx.NullBindingFactory();
+            factory = new org.apache.axis2.jibx.NullBindingFactory();
       </xsl:otherwise>
     </xsl:choose>
-                message = null;
-            } catch (Exception e) { message = e.getMessage(); }
-            bindingFactory = factory;
-            bindingErrorMessage = message;
+            message = null;
+        } catch (Exception e) { message = e.getMessage(); }
+        bindingFactory = factory;
+        bindingErrorMessage = message;
     <xsl:apply-templates mode="set-index-fields" select="abstract-type"/>
-            int[] indexes = null;
-            String[] prefixes = null;
-            if (factory != null) {
-                
-                // check for xsi namespace included
-                String[] nsuris = factory.getNamespaces();
-                int xsiindex = nsuris.length;
-                while (--xsiindex >= 0 &amp;&amp;
-                    !"http://www.w3.org/2001/XMLSchema-instance".equals(nsuris[xsiindex]));
-                
-                // get actual size of index and prefix arrays to be allocated
-                int nscount = <xsl:value-of select="$nscount"/>;
-                int usecount = nscount;
-                if (xsiindex >= 0) {
-                    usecount++;
-                }
-                
-                // allocate and initialize the arrays
-                indexes = new int[usecount];
-                prefixes = new String[usecount];
+        int[] indexes = null;
+        String[] prefixes = null;
+        if (factory != null) {
+            
+            // check for xsi namespace included
+            String[] nsuris = factory.getNamespaces();
+            int xsiindex = nsuris.length;
+            while (--xsiindex >= 0 &amp;&amp;
+                !"http://www.w3.org/2001/XMLSchema-instance".equals(nsuris[xsiindex]));
+            
+            // get actual size of index and prefix arrays to be allocated
+            int nscount = <xsl:value-of select="$nscount"/>;
+            int usecount = nscount;
+            if (xsiindex >= 0) {
+                usecount++;
+            }
+            
+            // allocate and initialize the arrays
+            indexes = new int[usecount];
+            prefixes = new String[usecount];
       <xsl:for-each select="binding-namespace">
         <xsl:variable name="nsindex" select="count(preceding-sibling::binding-namespace)"/>
-                indexes[<xsl:value-of select="$nsindex"/>] = nsIndex("<xsl:value-of select='@ns'/>", nsuris);
-                prefixes[<xsl:value-of select="$nsindex"/>] = "<xsl:value-of select='@prefix'/>";
+            indexes[<xsl:value-of select="$nsindex"/>] = nsIndex("<xsl:value-of select='@ns'/>", nsuris);
+            prefixes[<xsl:value-of select="$nsindex"/>] = "<xsl:value-of select='@prefix'/>";
       </xsl:for-each>
-                if (xsiindex >= 0) {
-                    indexes[nscount] = xsiindex;
-                    prefixes[nscount] = "xsi";
-                }
-                
+            if (xsiindex >= 0) {
+                indexes[nscount] = xsiindex;
+                prefixes[nscount] = "xsi";
             }
-            bindingNamespaceIndexes = indexes;
-            bindingNamespacePrefixes = prefixes;
+            
         }
-        
-        private static int nsIndex(String uri, String[] uris) {
-            for (int i = 0; i &lt; uris.length; i++) {
-                if (uri.equals(uris[i])) {
-                    return i;
-                }
+        bindingNamespaceIndexes = indexes;
+        bindingNamespacePrefixes = prefixes;
+    }
+    
+    private static int nsIndex(String uri, String[] uris) {
+        for (int i = 0; i &lt; uris.length; i++) {
+            if (uri.equals(uris[i])) {
+                return i;
             }
-            throw new IllegalArgumentException("Namespace " + uri + " not found in binding directory information");
         }
-        
-        private static void addMappingNamespaces(org.apache.axiom.soap.SOAPFactory factory, org.apache.axiom.om.OMElement wrapper, String nsuri, String nspref) {
-            String[] nss = bindingFactory.getNamespaces();
-            for (int i = 0; i &lt; bindingNamespaceIndexes.length; i++) {
-                int index = bindingNamespaceIndexes[i];
-                String uri = nss[index];
-                String prefix = bindingNamespacePrefixes[i];
-                if (!nsuri.equals(uri) || !nspref.equals(prefix)) {
-                    wrapper.declareNamespace(factory.createOMNamespace(uri, prefix));
-                }
+        throw new IllegalArgumentException("Namespace " + uri + " not found in binding directory information");
+    }
+    
+    private static void addMappingNamespaces(org.apache.axiom.soap.SOAPFactory factory, org.apache.axiom.om.OMElement wrapper, String nsuri, String nspref) {
+        String[] nss = bindingFactory.getNamespaces();
+        for (int i = 0; i &lt; bindingNamespaceIndexes.length; i++) {
+            int index = bindingNamespaceIndexes[i];
+            String uri = nss[index];
+            String prefix = bindingNamespacePrefixes[i];
+            if (!nsuri.equals(uri) || !nspref.equals(prefix)) {
+                wrapper.declareNamespace(factory.createOMNamespace(uri, prefix));
             }
         }
-        
-        private static org.jibx.runtime.impl.UnmarshallingContext getNewUnmarshalContext(org.apache.axiom.om.OMElement param)
-            throws org.jibx.runtime.JiBXException {
-            if (bindingFactory == null) {
-                throw new RuntimeException(bindingErrorMessage);
-            }
-            org.jibx.runtime.impl.UnmarshallingContext ctx =
-                (org.jibx.runtime.impl.UnmarshallingContext)bindingFactory.createUnmarshallingContext();
-            org.jibx.runtime.IXMLReader reader = new org.jibx.runtime.impl.StAXReaderWrapper(param.getXMLStreamReaderWithoutCaching(), "SOAP-message", true);
-            ctx.setDocument(reader);
-            ctx.toTag();
-            return ctx;
+    }
+    
+    private static org.jibx.runtime.impl.UnmarshallingContext getNewUnmarshalContext(org.apache.axiom.om.OMElement param)
+        throws org.jibx.runtime.JiBXException {
+        if (bindingFactory == null) {
+            throw new RuntimeException(bindingErrorMessage);
         }
-        
-        <!-- shouldn't be needed when no actual binding, but called by fault conversion code so must be left in for now -->
-        private static Object fromOM(org.apache.axiom.om.OMElement param, Class type,
-            java.util.Map extraNamespaces) {
-            try {
-                org.jibx.runtime.impl.UnmarshallingContext ctx = getNewUnmarshalContext(param);
-                return ctx.unmarshalElement(type);
-            } catch (Exception e) {
-                 throw new RuntimeException(e);
-            }
+        org.jibx.runtime.impl.UnmarshallingContext ctx =
+            (org.jibx.runtime.impl.UnmarshallingContext)bindingFactory.createUnmarshallingContext();
+        org.jibx.runtime.IXMLReader reader = new org.jibx.runtime.impl.StAXReaderWrapper(param.getXMLStreamReaderWithoutCaching(), "SOAP-message", true);
+        ctx.setDocument(reader);
+        ctx.toTag();
+        return ctx;
+    }
+    
+    private org.apache.axiom.om.OMElement mappedChild(Object value, org.apache.axiom.om.OMFactory factory) {
+        org.jibx.runtime.IMarshallable mrshable = (org.jibx.runtime.IMarshallable)value;
+        org.apache.axiom.om.OMDataSource src = new org.apache.axis2.jibx.JiBXDataSource(mrshable, bindingFactory);
+        int index = mrshable.JiBX_getIndex();
+        org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace(bindingFactory.getElementNamespaces()[index], "");
+        return factory.createOMElement(src, bindingFactory.getElementNames()[index], appns);
+    }
+    
+    <!-- shouldn't be needed when no actual binding, but called by fault conversion code so must be left in for now -->
+    private static Object fromOM(org.apache.axiom.om.OMElement param, Class type,
+        java.util.Map extraNamespaces) {
+        try {
+            org.jibx.runtime.impl.UnmarshallingContext ctx = getNewUnmarshalContext(param);
+            return ctx.unmarshalElement(type);
+        } catch (Exception e) {
+             throw new RuntimeException(e);
         }
+    }
   </xsl:template>
   
   <!-- Called by "initialize-binding" template to generate mapped class index fields. -->



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