You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/08/19 18:02:57 UTC

svn commit: r233496 - in /beehive/trunk: system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/ system-controls/test/src/webservice/tests...

Author: ekoneil
Date: Fri Aug 19 09:02:42 2005
New Revision: 233496

URL: http://svn.apache.org/viewcvs?rev=233496&view=rev
Log:
Two service control bug fixes:

BEEHIVE-703
BEEHIVE-705

Generally, this patch is focused on fixing awareness of the value of elementFormDefault and namespaces.

Contribution from Chad Schoettger.

BB: self
DRT: WSM / service control pass


Modified:
    beehive/trunk/system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ServiceControlImpl.jcs
    beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/RpcLiteralSample.java
    beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/RpcLitWebServiceTest.java
    beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/SoapMarshallingRpcLitArrayTypesTest.java
    beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/AxisHook.java
    beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
    beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/util/encoding/XmlBeanDeserializer.java
    beehive/trunk/wsm/src/core/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java

Modified: beehive/trunk/system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ServiceControlImpl.jcs
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ServiceControlImpl.jcs?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ServiceControlImpl.jcs (original)
+++ beehive/trunk/system-controls/src/webservice/org/apache/beehive/controls/system/webservice/jaxrpc/ServiceControlImpl.jcs Fri Aug 19 09:02:42 2005
@@ -90,6 +90,7 @@
     private String _username;
     private String _password;
     private int _timeout = TIMOUT_DEFAULT;
+    private Map<String, Boolean> _elementFormQualifiedMap;
 
     private transient TypeRegistrar _registrar;
     private transient Service _service;
@@ -515,7 +516,8 @@
                                        _beehiveTypeMetadata.getSoapBinding().getUse());
 
             final QName headerParamQName;
-            if(omStyle == SOAPBinding.Style.RPC) {
+            Boolean isElementFormQualified = _elementFormQualifiedMap.get(nxtArgMetaData.getWpTargetNamespace());
+            if (isElementFormQualified == null || !isElementFormQualified) {
                 headerParamQName = new QName(nxtArgMetaData.getWpName());
             } else {
                 headerParamQName = new QName(nxtArgMetaData.getWpTargetNamespace(), nxtArgMetaData.getWpName());
@@ -542,7 +544,7 @@
         // register the return type
         final Class javaTypeFromClass = method.getReturnType();
         if(!wmm.isOneWay() && javaTypeFromClass != void.class) {
-            QName resultsRegisteredTypeQName = _registrar.registerType(
+            QName resultsRegisteredTypeQName = getRegistrar().registerType(
                 javaTypeFromClass,
                 wmm.getXmlReturnType(),
                 _beehiveTypeMetadata.getSoapBinding().getStyle(),
@@ -550,7 +552,7 @@
 
             call.setReturnType(resultsRegisteredTypeQName, javaTypeFromClass);
         } else {
-            call.setReturnType(_registrar.getVoidType());
+            call.setReturnType(getRegistrar().getVoidType());
         }
 
         // AXIS dependecy... this is needed for the Handlers
@@ -610,6 +612,7 @@
 
         try {
             _beehiveTypeMetadata = wsdlProcessor.getObjectModel();
+            _elementFormQualifiedMap = wsdlProcessor.genElementFormQualifiedMap();
         } catch(Exception e) {
             throw new ControlException(e.getMessage(), e);
         }
@@ -778,7 +781,7 @@
         if (_registrar == null) {
             BindingLookupService lookupService = new SystemTypeLookupService();
             TypeMapping tm = getService(_serviceName).getTypeMappingRegistry().getDefaultTypeMapping();
-            _registrar = new AxisTypeRegistrar((org.apache.axis.encoding.TypeMapping)tm, lookupService);
+            _registrar = new AxisTypeRegistrar(tm, lookupService);
         }
         return _registrar;
     }

Modified: beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/RpcLiteralSample.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/RpcLiteralSample.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/RpcLiteralSample.java (original)
+++ beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex3/RpcLiteralSample.java Fri Aug 19 09:02:42 2005
@@ -75,7 +75,7 @@
         Phone phoneNumber = new Phone(425, "555", "1234");
         Address address = new Address(10230, "NE Points Drive", "Kirkland", state, 98008, phoneNumber);
         addressHolder.value = address;
-        return 0;
+        return 77;
     }
 
     /**
@@ -90,7 +90,7 @@
         Phone phoneNumber = new Phone(714, "555", "1234");
         Address address = new Address(1, "some street", "Los Angeles", state, 90210, phoneNumber);
         addressHolder.value = address;
-        return 0;
+        return -1;
     }
 
     /**
@@ -103,7 +103,7 @@
     public int changeAddressInBody(@WebParam(name="inout_param_body", mode=WebParam.Mode.INOUT) AddressHolder addressHolder) {
         Address address = addressHolder.value;
         address.setZip(address.getZip() + 1);
-        return 0;
+        return 3;
     }
 
     /**
@@ -116,7 +116,7 @@
     public int changeAddressInHeader(@WebParam(name="inout_param_header", header=true, mode=WebParam.Mode.INOUT) AddressHolder addressHolder) {
         Address address = addressHolder.value;
         address.setZip(address.getZip() + 1);
-        return 0;
+        return 4;
     }
 
     /**

Modified: beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/RpcLitWebServiceTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/RpcLitWebServiceTest.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/RpcLitWebServiceTest.java (original)
+++ beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/RpcLitWebServiceTest.java Fri Aug 19 09:02:42 2005
@@ -33,7 +33,7 @@
     @Control
     public RpcLiteralSampleService client;
 
-    /*
+
     public void testReturnAddressFromBody() throws Exception {
 
         web.complex3.StateType state = web.complex3.StateType.Factory.newInstance();
@@ -65,8 +65,8 @@
         assertEquals("bronco", phoneResult.getExchange());
         assertTrue(phoneResult.isNilNumber());
     }
-    */
-/*
+    
+
     public void testReturnAddressFromHeader() throws Exception {
         web.complex3.StateType state = web.complex3.StateType.Factory.newInstance();
         state.setState("CA");
@@ -100,14 +100,14 @@
 
     public void testCreateAddressInBody() throws Exception {
         web.complex3.Address addr = web.complex3.Address.Factory.newInstance();
-        GenericHolder gHolder = new GenericHolder(addr);
+        GenericHolder<web.complex3.Address> gHolder = new GenericHolder<web.complex3.Address>(addr);
         IntHolder iHolder = new IntHolder();
 
         client.createAddressInBody(gHolder, iHolder);
 
         assertEquals(77, iHolder.value);
 
-        addr = (web.complex3.Address) gHolder.value;
+        addr = gHolder.value;
         assertEquals("PA", addr.getState().getState());
         assertEquals(425, addr.getPhoneNumber().getAreaCode());
         assertEquals("555", addr.getPhoneNumber().getExchange());
@@ -120,14 +120,14 @@
 
     public void testCreateAddressInHeader() throws Exception {
         web.complex3.Address addr = web.complex3.Address.Factory.newInstance();
-        GenericHolder gHolder = new GenericHolder(addr);
+        GenericHolder<web.complex3.Address> gHolder = new GenericHolder<web.complex3.Address>(addr);
         IntHolder iHolder = new IntHolder();
 
         client.createAddressInHeader(gHolder, iHolder);
 
         assertEquals(-1, iHolder.value);
 
-        addr = (web.complex3.Address) gHolder.value;
+        addr = gHolder.value;
         assertEquals("CA", addr.getState().getState());
         assertEquals(714, addr.getPhoneNumber().getAreaCode());
         assertEquals("555", addr.getPhoneNumber().getExchange());
@@ -143,11 +143,11 @@
         addr.setCity("Boulder");
         addr.setZip(66666);
 
-        GenericHolder gHolder = new GenericHolder(addr);
+        GenericHolder<web.complex3.Address> gHolder = new GenericHolder<web.complex3.Address>(addr);
         int result = client.changeAddressInBody(gHolder);
 
         assertEquals(3, result);
-        web.complex3.Address returnAddr = (web.complex3.Address) gHolder.value;
+        web.complex3.Address returnAddr = gHolder.value;
         assertEquals(addr.getCity(), returnAddr.getCity());
         assertEquals(addr.getZip() + 1, returnAddr.getZip());
     }
@@ -157,15 +157,16 @@
         addr.setCity("Louisville");
         addr.setZip(99999);
 
-        GenericHolder gHolder = new GenericHolder(addr);
+        GenericHolder<web.complex3.Address> gHolder = new GenericHolder<web.complex3.Address>(addr);
         int result = client.changeAddressInHeader(gHolder);
 
         assertEquals(4, result);
-        web.complex3.Address returnAddr = (web.complex3.Address) gHolder.value;
+        web.complex3.Address returnAddr = gHolder.value;
         assertEquals(addr.getCity(), returnAddr.getCity());
         assertEquals(addr.getZip() + 1, returnAddr.getZip());
     }
 
+/*  Not working...
     public void testThrowAddressException() throws Exception {
 
         try {
@@ -177,10 +178,6 @@
         fail("Expected AddressException to be thrown!");
     }
 */
-
-    public void testDummy() {
-        /* note, all tests are disabled here until service control bugs are fixed to handle these use cases */
-    }
 
     public void setUp() throws Exception {
         try {

Modified: beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/SoapMarshallingRpcLitArrayTypesTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/SoapMarshallingRpcLitArrayTypesTest.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/SoapMarshallingRpcLitArrayTypesTest.java (original)
+++ beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/SoapMarshallingRpcLitArrayTypesTest.java Fri Aug 19 09:02:42 2005
@@ -22,9 +22,12 @@
 import org.apache.beehive.controls.system.webservice.units.utils.ControlTestCase;
 import test.SoapMarshallingRpcLitArrayTypesService;
 
+import javax.xml.namespace.QName;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Arrays;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 
 public class SoapMarshallingRpcLitArrayTypesTest
         extends ControlTestCase {
@@ -65,9 +68,9 @@
 
     public void testEchoByteArray() throws Exception {
         soapMarshalling.ArrayOfXsdByte ar = soapMarshalling.ArrayOfXsdByte.Factory.newInstance();
-        ar.addItem(new Byte(Byte.MAX_VALUE));
-        ar.addItem(new Byte(Byte.MIN_VALUE));
-        ar.addItem(new Byte(Byte.MAX_VALUE));
+        ar.addItem(Byte.MAX_VALUE);
+        ar.addItem(Byte.MIN_VALUE);
+        ar.addItem(Byte.MAX_VALUE);
 
         soapMarshalling.ArrayOfXsdByte result = client.echoByte(ar);
         byte[] array = result.getItemArray();
@@ -274,21 +277,20 @@
 //            assertEquals(0, cal.compareTo(cResult[1]));
 //        }
 
-//        public void testEchoCalendarArray() throws Exception {
-//            Calendar cal = new GregorianCalendar();
-//            cal.setTimeInMillis(123456789);
-//
-//            soapMarshalling.ArrayOfXsdDateTime ar = soapMarshalling.ArrayOfXsdDateTime.Factory.newInstance();
-//            ar.addItem(cal);
-//            ar.addItem(cal);
-//
-//            soapMarshalling.ArrayOfXsdDateTime result = client.echoCalendar(ar);
-//            Calendar[] cResult = result.getItemArray();
-//            assertEquals(2, cResult.length);
-//            assertEquals(0, cal.compareTo(cResult[0]));
-//            assertEquals(0, cal.compareTo(cResult[1]));
-//        }
-
+        public void testEchoCalendarArray() throws Exception {
+            Calendar cal = new GregorianCalendar();
+            cal.setTimeInMillis(123456789);
+
+            soapMarshalling.ArrayOfXsdDateTime ar = soapMarshalling.ArrayOfXsdDateTime.Factory.newInstance();
+            ar.addItem(cal);
+            ar.addItem(cal);
+
+            soapMarshalling.ArrayOfXsdDateTime result = client.echoCalendar(ar);
+            Calendar[] cResult = result.getItemArray();
+            assertEquals(2, cResult.length);
+            assertEquals(0, cal.compareTo(cResult[0]));
+            assertEquals(0, cal.compareTo(cResult[1]));
+        }
 
 //    public void testEchoQNameArray() throws Exception {
 //        soapMarshalling.ArrayOfXsdQName ar = soapMarshalling.ArrayOfXsdQName.Factory.newInstance();

Modified: beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/AxisHook.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/AxisHook.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/AxisHook.java (original)
+++ beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/AxisHook.java Fri Aug 19 09:02:42 2005
@@ -161,8 +161,7 @@
                         od.setReturnClass(returnType);
                     }
 
-                    if (wsm.getSoapBinding().getStyle() == SOAPBinding.Style.RPC
-                            && returnType.isArray() && JavaUtils.isBasic(returnType.getComponentType())) {
+                    if (wsm.getSoapBinding().getStyle() == SOAPBinding.Style.RPC && returnType.isArray()) {
                         od.getReturnParamDesc().setItemQName(new QName("","item"));
                     }
                 }

Modified: beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java (original)
+++ beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java Fri Aug 19 09:02:42 2005
@@ -25,13 +25,13 @@
 import java.util.Map;
 import javax.jws.soap.SOAPBinding;
 import javax.xml.namespace.QName;
+import javax.xml.rpc.encoding.TypeMapping;
 
 import org.apache.axis.description.ElementDesc;
 import org.apache.axis.description.FieldDesc;
 import org.apache.axis.description.TypeDesc;
 import org.apache.axis.encoding.DeserializerFactory;
 import org.apache.axis.encoding.SerializerFactory;
-import org.apache.axis.encoding.TypeMapping;
 import org.apache.axis.encoding.XMLType;
 import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
 import org.apache.axis.encoding.ser.ArraySerializerFactory;

Modified: beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/util/encoding/XmlBeanDeserializer.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/util/encoding/XmlBeanDeserializer.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/util/encoding/XmlBeanDeserializer.java (original)
+++ beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/util/encoding/XmlBeanDeserializer.java Fri Aug 19 09:02:42 2005
@@ -1,9 +1,9 @@
 /*
  * XmlBeanDeserializer.java
- * 
+ *
  * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * 
+ *
+ *
  * Licensed 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
@@ -15,71 +15,104 @@
  * 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.
- * 
- * 
+ *
+ *
  * Original author: Jonathan Colwell
  */
 package org.apache.beehive.wsm.axis.util.encoding;
 
-import javax.xml.namespace.QName;
-
 import org.apache.axis.encoding.DeserializationContext;
 import org.apache.axis.encoding.DeserializerImpl;
 import org.apache.axis.message.MessageElement;
-import org.apache.xmlbeans.QNameSet;
+import org.apache.xmlbeans.SchemaProperty;
 import org.apache.xmlbeans.SchemaType;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
+import javax.xml.namespace.QName;
+import java.util.HashMap;
+
 /**
- * ****************************************************************************
- *
- * @author Jonathan Colwell
+ * Custom deserializer for XMLBeans.  AXIS specific, used by WSM module and the service control.
  */
-public class XmlBeanDeserializer
-    extends DeserializerImpl {
-
+public class XmlBeanDeserializer extends DeserializerImpl
+{
     private Class mJavaType;
     private QName mXmlType;
 
-    public XmlBeanDeserializer(Class javaType, QName xmlType) {
+    /**
+     * Construct a new XmlBeanDeserializer.
+     * @param javaType Class to map xml to.
+     * @param xmlType XML type to deserialize.
+     */
+    public XmlBeanDeserializer(Class javaType, QName xmlType)
+    {
         mJavaType = javaType;
+        mXmlType = xmlType;
     }
 
+    /**
+     *  Overrides AXIS DeserializerImpl method.
+     *
+     * @param namespace
+     * @param localName
+     * @param prefix
+     * @param attributes
+     * @param context
+     * @throws SAXException
+     */
     public void onStartElement(String namespace,
                                String localName,
                                String prefix,
                                Attributes attributes,
                                DeserializationContext context)
-        throws SAXException {
+            throws SAXException
+    {
         try {
+
             MessageElement me = context.getCurElement();
+
+            SchemaType st = (SchemaType) mJavaType.getField("type").get(null);
             XmlOptions opts = new XmlOptions().setLoadReplaceDocumentElement(null);
-            XmlObject xObj = XmlObject.Factory.parse(me, opts);
-            SchemaType st = xObj.schemaType();
-            SchemaType jt = (SchemaType)mJavaType.getField("type").get(null);
-            XmlObject converted = xObj.changeType(jt);
-            if(converted != null) {
-                setValue(converted);
-            }
-            else {
-                XmlObject[] children = xObj.selectChildren(QNameSet.ALL);
+            opts.setDocumentType(st);
 
-                /* review: what does this do? st is never used. */
-                for(XmlObject kid : children) {
-                    st = kid.schemaType();
-                    converted = xObj.changeType(jt);
-                    if(converted != null) {
-                        setValue(converted);
-                        break;
-                    }
-                }
+            // axis always returns element form qualified responses, this causes
+            // problems if the WSDL did not specify elementFormDefault="qualified"
+            // if this mis-match is detected, fix it with the following block of code
+            if (!isElementFormQualified(st)) {
+                HashMap<String, String> substituteNamespaces = new HashMap<String, String>();
+                substituteNamespaces.put(mXmlType.getNamespaceURI(), "");
+                opts.setLoadSubstituteNamespaces(substituteNamespaces);
             }
-        }
-        catch(Exception xe) {
+
+            XmlObject xObj = XmlObject.Factory.parse(me, opts);
+            assert xObj.validate() : "XmlBeanDeserializer: Could not map to xml bean: " + me.toString();
+
+            setValue(xObj);
+
+        } catch (Exception xe) {
             throw new SAXException(xe);
         }
     }
-}
\ No newline at end of file
+
+    /**
+     * Check if the elementFormDefault was set to 'qualified' for the schematype.  If elementFormDefault
+     * has been set to qualified, each SchemaProperty of the SchemaType will have a namespace URI included
+     * as part of its name.
+     * @param schemaType SchemaType to check.
+     * @return true if elementFormDefault was set to qualified.
+     */
+    private boolean isElementFormQualified(SchemaType schemaType)
+    {
+        SchemaProperty[] props = schemaType.getElementProperties();
+        if (props != null && props.length > 0) {
+            String propNamespace = props[0].getName().getNamespaceURI();
+            if (propNamespace != null && !"".equals(propNamespace)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Modified: beehive/trunk/wsm/src/core/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/core/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java?rev=233496&r1=233495&r2=233496&view=diff
==============================================================================
--- beehive/trunk/wsm/src/core/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java (original)
+++ beehive/trunk/wsm/src/core/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java Fri Aug 19 09:02:42 2005
@@ -88,6 +88,28 @@
         return new QName(services[0].getName());
     }
 
+    /**
+     * Create a map of schema namespaces -> is element form qualified.  Each key is a schema
+     * namespace URI, the value for each key is true if the schema sets 'elementFormDefault=qualified',
+     * false if not set or set to 'unqualified'.
+     * @return Map of namespace -> is element form qualified.
+     */
+    public Map<String, Boolean> genElementFormQualifiedMap()
+    {
+        HashMap<String, Boolean> map = new HashMap<String, Boolean>();
+
+        TDefinitions defs = defDoc.getDefinitions();
+        TTypes types = defs.sizeOfTypesArray() > 0 ? defs.getTypesArray(0) : null;
+        if (types != null) {
+            Schema[] schemas = selectChildren(types, Schema.class);
+            for(int i = 0; i < schemas.length; i++) {
+                map.put(schemas[i].getTargetNamespace(),
+                        "qualified".equalsIgnoreCase(schemas[i].getElementFormDefault().toString()));
+            }
+        }
+        return map;
+    }
+
     public BeehiveWsTypeMetadata getObjectModel() throws Exception {
 
         BeehiveWsTypeMetadata wsm = new DefaultTypeMetadataImpl();
@@ -517,12 +539,13 @@
         else if(el.isSetMinOccurs()) {
             String minOccur = el.getMinOccurs().toString();
             // If minoccur is other than 0, or 1 then it is array also
-            if("0" != minOccur && "1" != minOccur)
+            if(!"0".equals(minOccur) && !"1".equals(minOccur)) {
                 isArray = true;
+            }
         }
 
-        String name = null;
-        QName xmlType = null;
+        String name;
+        QName xmlType;
         if(el.isSetName() && el.isSetType()) {
             name = el.getName();
             xmlType = el.getType();
@@ -532,8 +555,8 @@
             name = ref.getLocalPart();
             xmlType = ref;
         }
-        else
-            throw new RuntimeException("invalid element: " + el);
+        else throw new RuntimeException("invalid element: " + el);
+
         Class javaType = findClassForQname(xmlType);
         if(isArray) {
             // create an array of the type, then get its type.
@@ -560,8 +583,7 @@
 
     private void processTBindingOperation(TBinding tBind,
                                           BeehiveWsTypeMetadata wsm,
-                                          Map<String, BeehiveWsMethodMetadata> methodMap)
-        throws IllegalAccessException, NoSuchFieldException {
+                                          Map<String, BeehiveWsMethodMetadata> methodMap) {
 
         TBindingOperation[] tBops = tBind.getOperationArray();
         for(TBindingOperation tBop : tBops) {
@@ -616,8 +638,7 @@
         }
     }
 
-    public static org.xmlsoap.schemas.wsdl.soap.TOperation[] getSOAPOperations(TBindingOperation bo)
-        throws IllegalAccessException, NoSuchFieldException {
+    public static org.xmlsoap.schemas.wsdl.soap.TOperation[] getSOAPOperations(TBindingOperation bo) {
         return selectChildren(bo, org.xmlsoap.schemas.wsdl.soap.TOperation.class);
     }
 
@@ -651,17 +672,24 @@
         return res;
     }
 
-    public static org.xmlsoap.schemas.wsdl.soap.TAddress[] getSOAPAddress(TPort port)
-        throws IllegalAccessException, NoSuchFieldException {
+    public static org.xmlsoap.schemas.wsdl.soap.TAddress[] getSOAPAddress(TPort port) {
         return selectChildren(port, org.xmlsoap.schemas.wsdl.soap.TAddress.class);
     }
 
-    private static <T extends XmlObject> T[] selectChildren(XmlObject parent, Class<T> childClass)
-        throws IllegalAccessException, NoSuchFieldException {
+    private static <T extends XmlObject> T[] selectChildren(XmlObject parent, Class<T> childClass) {
         // retrieve the SchemaType from the static type field
         if(parent == null)
             return null;
-        SchemaType st = (SchemaType)childClass.getField("type").get(null);
+
+        SchemaType st = null;
+        try {
+            st = (SchemaType)childClass.getField("type").get(null);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(e);
+        }
+
         SchemaType originalType = null;
         QName element;
         if(st.isAnonymousType()) {