Author: jkaputin
Date: Wed Jul  5 10:41:21 2006
New Revision: 419295

URL: http://svn.apache.org/viewvc?rev=419295&view=rev
Log:
Modified creation of extension properties so that all 
extension properties for a given binding type will be
present in the component model, even if there are no
underlying extension elementns or attributes in the 
WSDL infoset.

Modified:
    
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
    
incubator/woden/java/src/org/apache/woden/internal/wsdl20/extensions/rpc/RPCConstants.java
    
incubator/woden/java/test/org/apache/woden/wsdl20/extensions/http/HTTPBindingMessageReferenceExtensionsTest.java

Modified: 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java?rev=419295&r1=419294&r2=419295&view=diff
==============================================================================
--- 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
 (original)
+++ 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
 Wed Jul  5 10:41:21 2006
@@ -39,6 +39,7 @@
 import org.apache.woden.internal.wsdl20.TypeDefinitionImpl;
 import org.apache.woden.internal.wsdl20.TypesImpl;
 import org.apache.woden.internal.wsdl20.extensions.ComponentExtensionsImpl;
+import org.apache.woden.internal.wsdl20.extensions.rpc.RPCConstants;
 import org.apache.woden.wsdl20.Binding;
 import org.apache.woden.wsdl20.BindingFault;
 import org.apache.woden.wsdl20.BindingFaultReference;
@@ -94,7 +95,11 @@
        private List fBindingsDone = new Vector();
 
        private List fServicesDone = new Vector();
-
+    
+    private URI fBindingType = null;
+    
+    private boolean fIsSoapUnderlyingProtocolHttp = false;
+    
        public ComponentModelBuilder(DescriptionImpl desc) {
                fDesc = desc;
                // TODO fErrorRpt = errorRpt; see todo in 
buildElementDeclarations()
@@ -262,14 +267,15 @@
        }
 
        private void buildInterfaceOperationExtensions(InterfaceOperationImpl 
oper) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this operation by extension elements or 
attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(InterfaceOperation.class);
 
-               /*
-                * Create a ComponentExtensions object for each registered 
extension
-                * namespace used with this binding operation.
-                */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (oper.hasExtensionAttributesForNamespace(extNS)) {
@@ -278,9 +284,47 @@
                                oper.setComponentExtensions(extNS, compExt);
                        }
                }
-
-               // TODO: apply component model default rules if these 
extensions are
-               // absent in the XML infoset
+        
+        /*
+         * {safety} is a REQUIRED extension property on interface operation
+         * so if an InterfaceOperationExtensions object has not already been
+         * created, create one now.
+         */
+        if (oper.getComponentExtensionsForNamespace(
+                ComponentExtensions.URI_NS_EXTENSIONS) == null) {
+            ComponentExtensions compExt = createComponentExtensions(
+                    InterfaceOperation.class, oper,
+                    ComponentExtensions.URI_NS_EXTENSIONS);
+            oper.setComponentExtensions(
+                    ComponentExtensions.URI_NS_EXTENSIONS, compExt);
+        }
+        
+        /*
+         * If interface operation style includes RPC then if an
+         * RPCInterfaceOperationExtensions object has not already been
+         * created, create one now.
+         */
+        boolean isRPCStyle = false;
+        URI[] style = oper.getStyle();
+        for(int i=0; i<style.length; i++)
+        {
+            URI temp = style[i];
+            if(RPCConstants.URI_STYLE_RPC.equals(temp)) {
+                isRPCStyle = true;
+                break;
+            }
+        }
+        
+        if(isRPCStyle) {
+            if (oper.getComponentExtensionsForNamespace(
+                    ComponentExtensions.URI_NS_RPC) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        InterfaceOperation.class, oper,
+                        ComponentExtensions.URI_NS_RPC);
+                oper.setComponentExtensions(
+                        ComponentExtensions.URI_NS_RPC, compExt);
+            }
+        }
        }
 
        
/***************************************************************************
@@ -296,9 +340,9 @@
                for (int i = 0; i < bindingEls.length; i++) {
                        BindingImpl bindImpl = (BindingImpl) bindingEls[i];
                        if (!fBindingsDone.contains(bindImpl)) {
+                buildBindingExtensions(bindImpl);
                                buildBindingFaults(bindImpl);
                                buildBindingOperations(bindImpl);
-                               buildBindingExtensions(bindImpl);
                                fBindingsDone.add(bindImpl);
                        }
                }
@@ -345,14 +389,15 @@
        }
 
        private void buildBindingExtensions(BindingImpl binding) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this binding by extension elements or 
attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(Binding.class);
 
-               /*
-                * First, create a ComponentExtensions object for each 
registered
-                * extension namespace used with this binding.
-                */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (binding.hasExtensionAttributesForNamespace(extNS)
@@ -374,10 +419,12 @@
                 * interpreted here at run time.
                 */
                if (ComponentExtensions.URI_NS_SOAP.equals(binding.getType())) {
+            
+            fBindingType = ComponentExtensions.URI_NS_SOAP;
+            
                        /*
-                        * If the binding type is SOAP, the {soap version} 
property defaults
-                        * to "1.2" so if a a SOAPBindingExtensions object has 
not already
-                        * been created, create one now to handle this default 
value.
+                        * If the binding type is SOAP and a 
SOAPBindingExtensions object has
+             * not already been created, create one now.
                         */
                        if (binding
                                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_SOAP) == null) {
@@ -392,12 +439,13 @@
 
                        if (ComponentExtensions.URI_NS_HTTP.equals(sbe
                                        .getSoapUnderlyingProtocol())) {
+                
+                fIsSoapUnderlyingProtocolHttp = true;
+                
                                /*
-                                * If the binding type is SOAP and the {soap 
underlying
-                                * protocol} property is HTTP, then the {http 
version} property
-                                * defaults to "1.1" so if an 
HTTPBindingExtensions object has
-                                * not already been created, create one now to 
handle this
-                                * default value.
+                                * If the binding type is SOAP and the {soap 
underlying protocol}
+                 * property is HTTP, then if an HTTPBindingExtensions object 
has
+                                * not already been created, create one now.
                                 */
                                if (binding
                                                
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
@@ -411,11 +459,12 @@
                }
 
                if (ComponentExtensions.URI_NS_HTTP.equals(binding.getType())) {
+            
+            fBindingType = ComponentExtensions.URI_NS_HTTP;
+            
                        /*
-                        * If the binding type is HTTP, the Binding extension 
properties
-                        * {http query parameter separator default} and {http 
cookies} are
-                        * REQUIRED so if an HTTPBindingExtensions object has 
not already
-                        * been created, create one now to handle their default 
values.
+                        * If the binding type is HTTP, then if an 
HTTPBindingExtensions 
+             * object has not already been created, create one now.
                         */
                        if (binding
                                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
@@ -429,14 +478,16 @@
        }
 
        private void buildBindingFaultExtensions(BindingFaultImpl bindFault) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this binding fault by extension elements 
+         * or attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(BindingFault.class);
 
-               /*
-                * First, create a ComponentExtensions object for each 
registered
-                * extension namespace used with this binding fault.
-                */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (bindFault.hasExtensionAttributesForNamespace(extNS)
@@ -457,14 +508,10 @@
                 * HTTP or user-defined extensions can be registered in some 
way and
                 * interpreted here at run time.
                 */
-               URI bindingType = ((BindingElement) 
bindFault.getParentElement())
-                               .getType();
-               if (ComponentExtensions.URI_NS_SOAP.equals(bindingType)) {
+               if (ComponentExtensions.URI_NS_SOAP.equals(fBindingType)) {
                        /*
-                        * If the binding type is SOAP, the {soap fault code} 
and {soap
-                        * fault subcodes} properties default to xs:token 
"#any", so if a
-                        * SOAPBindingFaultExtensions object has not already 
been created,
-                        * create one now to handle these default values.
+                        * If the binding type is SOAP and a 
SOAPBindingFaultExtensions object
+             * has not already been created, create one now.
                         */
                        if (bindFault
                                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_SOAP) == null) {
@@ -474,16 +521,28 @@
                                bindFault.setComponentExtensions(
                                                
ComponentExtensions.URI_NS_SOAP, compExt);
                        }
+            
+            if (fIsSoapUnderlyingProtocolHttp) {
+                /*
+                 * If the binding type is SOAP and the {soap underlying 
protocol}
+                 * property is HTTP, then if an HTTPBindingFaultExtensions 
object
+                 * has not already been created, create one now.
+                 */
+                if (bindFault
+                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
+                    ComponentExtensions compExt = createComponentExtensions(
+                            BindingFault.class, bindFault,
+                            ComponentExtensions.URI_NS_HTTP);
+                    bindFault.setComponentExtensions(
+                            ComponentExtensions.URI_NS_HTTP, compExt);
+                }
+            }
                }
 
-               if (ComponentExtensions.URI_NS_HTTP.equals(bindingType)) {
+               if (ComponentExtensions.URI_NS_HTTP.equals(fBindingType)) {
                        /*
-                        * If the binding type is HTTP, the BindingFault 
extension property
-                        * {http error status code}, {http output 
serialization}, {http
-                        * fault serialization} and {http location ignore 
uncited} are
-                        * REQUIRED so if an HTTPBindingFaultExtensions object 
has not
-                        * already been created, create one now to handle their 
default
-                        * values.
+                        * If the binding type is HTTP and an 
HTTPBindingFaultExtensions object 
+             * has not already been created, create one now.
                         */
                        if (bindFault
                                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
@@ -498,14 +557,16 @@
        }
 
        private void buildBindingOperationExtensions(BindingOperationImpl 
bindOper) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this binding operation by extension elements 
+         * or attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(BindingOperation.class);
 
-               /*
-                * First, create a ComponentExtensions object for each 
registered
-                * extension namespace used with this binding operation.
-                */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (bindOper.hasExtensionAttributesForNamespace(extNS)
@@ -526,16 +587,41 @@
                 * HTTP or user-defined extensions can be registered in some 
way and
                 * interpreted here at run time.
                 */
-               URI bindingType = ((BindingElement) bindOper.getParentElement())
-                               .getType();
-               if (ComponentExtensions.URI_NS_HTTP.equals(bindingType)) {
+        if (ComponentExtensions.URI_NS_SOAP.equals(fBindingType)) {
+            /*
+             * If the binding type is SOAP and a 
SOAPBindingOperationExtensions object
+             * has not already been created, create one now.
+             */
+            if (bindOper
+                    
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_SOAP) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        BindingOperation.class, bindOper,
+                        ComponentExtensions.URI_NS_SOAP);
+                bindOper.setComponentExtensions(
+                        ComponentExtensions.URI_NS_SOAP, compExt);
+            }
+            
+            if (fIsSoapUnderlyingProtocolHttp) {
+                /*
+                 * If the binding type is SOAP and the {soap underlying 
protocol}
+                 * property is HTTP, then if an HTTPBindingOperationExtensions 
object
+                 * has not already been created, create one now.
+                 */
+                if (bindOper
+                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
+                    ComponentExtensions compExt = createComponentExtensions(
+                            BindingOperation.class, bindOper,
+                            ComponentExtensions.URI_NS_HTTP);
+                    bindOper.setComponentExtensions(
+                            ComponentExtensions.URI_NS_HTTP, compExt);
+                }
+            }
+        }
+        
+               if (ComponentExtensions.URI_NS_HTTP.equals(fBindingType)) {
                        /*
-                        * If the binding type is HTTP, the BindingOperation 
extension
-                        * properties {http input serialization}, {http output
-                        * serialization}, {http fault serialization} and {http 
location
-                        * ignore uncited} are REQUIRED so if an
-                        * HTTPBindingOperationExtensions object has not 
already been
-                        * created, create one now to handle their default 
values.
+                        * If the binding type is HTTP and an 
HTTPBindingOperationExtensions
+             * object has not already been created, create one now.
                         */
                        if (bindOper
                                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
@@ -550,19 +636,16 @@
 
        private void buildBindingMessageReferenceExtensions(
                        BindingMessageReferenceImpl bindMsgRef) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this binding message reference by extension 
+         * elements or attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(BindingMessageReference.class);
 
-        /*
-         * Create a ComponentExtensions object for each registered
-         * extension namespace used with this binding message reference.
-         * 
-         * This component does not have any REQUIRED extension properties,
-         * so no ComponentExtensions will be created automatically (i.e. to
-         * handle default values where REQUIRED extensions are omitted from
-         * the WSDL)
-         */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (bindMsgRef.hasExtensionAttributesForNamespace(extNS)
@@ -572,10 +655,62 @@
                                bindMsgRef.setComponentExtensions(extNS, 
compExt);
                        }
                }
+        
+        if (ComponentExtensions.URI_NS_SOAP.equals(fBindingType)) {
+            /*
+             * If the binding type is SOAP and a 
SOAPBindingMessageReferenceExtensions 
+             * object has not already been created, create one now.
+             */
+            if (bindMsgRef
+                    
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_SOAP) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        BindingMessageReference.class, bindMsgRef,
+                        ComponentExtensions.URI_NS_SOAP);
+                bindMsgRef.setComponentExtensions(
+                        ComponentExtensions.URI_NS_SOAP, compExt);
+            }
+            
+            if (fIsSoapUnderlyingProtocolHttp) {
+                /*
+                 * If the binding type is SOAP and the {soap underlying 
protocol}
+                 * property is HTTP, then if an 
HTTPBindingMessageReferenceExtensions 
+                 * object has not already been created, create one now.
+                 */
+                if (bindMsgRef
+                        
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
+                    ComponentExtensions compExt = createComponentExtensions(
+                            BindingMessageReference.class, bindMsgRef,
+                            ComponentExtensions.URI_NS_HTTP);
+                    bindMsgRef.setComponentExtensions(
+                            ComponentExtensions.URI_NS_HTTP, compExt);
+                }
+            }
+        }
+        
+        if (ComponentExtensions.URI_NS_HTTP.equals(fBindingType)) {
+            /*
+             * If the binding type is HTTP and an 
HTTPBindingMessageReferenceExtensions
+             * object has not already been created, create one now.
+             */
+            if (bindMsgRef
+                    
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        BindingMessageReference.class, bindMsgRef,
+                        ComponentExtensions.URI_NS_HTTP);
+                bindMsgRef.setComponentExtensions(
+                        ComponentExtensions.URI_NS_HTTP, compExt);
+            }
+        }
        }
 
        private void buildBindingFaultReferenceExtensions(
                        BindingFaultReferenceImpl bindFaultRef) {
+        
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this binding message reference by extension 
+         * elements or attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(BindingFaultReference.class);
@@ -589,6 +724,21 @@
                                bindFaultRef.setComponentExtensions(extNS, 
compExt);
                        }
                }
+        
+        if (ComponentExtensions.URI_NS_SOAP.equals(fBindingType)) {
+            /*
+             * If the binding type is SOAP and a 
SOAPBindingFaultReferenceExtensions 
+             * object has not already been created, create one now.
+             */
+            if (bindFaultRef
+                    
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_SOAP) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        BindingFaultReference.class, bindFaultRef,
+                        ComponentExtensions.URI_NS_SOAP);
+                bindFaultRef.setComponentExtensions(
+                        ComponentExtensions.URI_NS_SOAP, compExt);
+            }
+        }
        }
 
        private void buildServices(DescriptionImpl desc) {
@@ -614,14 +764,15 @@
 
        private void buildEndpointExtensions(EndpointImpl endpoint) {
                
+        /*
+         * Create a ComponentExtensions object for each registered extension
+         * namespace used within this endpoint by extension 
+         * elements or attributes.
+         */
                ExtensionRegistry er = fDesc.getExtensionRegistry();
                URI[] extNamespaces = er
                                
.queryComponentExtensionNamespaces(Endpoint.class);
 
-               /*
-                * Create a ComponentExtensions object for each registered
-                * extension namespace used with this endpoint.
-                */
                for (int i = 0; i < extNamespaces.length; i++) {
                        URI extNS = extNamespaces[i];
                        if (endpoint.hasExtensionAttributesForNamespace(extNS)
@@ -631,7 +782,27 @@
                                endpoint.setComponentExtensions(extNS, compExt);
                        }
                }
-               
+        
+        if ((ComponentExtensions.URI_NS_SOAP.equals(fBindingType) && 
+                fIsSoapUnderlyingProtocolHttp) 
+                ||
+             ComponentExtensions.URI_NS_HTTP.equals(fBindingType)) {
+            
+            /*
+             * If the binding type is SOAP and the {soap underlying protocol}
+             * property is HTTP or if the binding type is HTTP, then if an 
+             * HTTPEndpointExtensions object has not already been created, 
+             * create one now.
+             */
+            if (endpoint
+                    
.getComponentExtensionsForNamespace(ComponentExtensions.URI_NS_HTTP) == null) {
+                ComponentExtensions compExt = createComponentExtensions(
+                        Endpoint.class, endpoint,
+                        ComponentExtensions.URI_NS_HTTP);
+                endpoint.setComponentExtensions(
+                        ComponentExtensions.URI_NS_HTTP, compExt);
+            }
+        }
        }
 
        /*

Modified: 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/extensions/rpc/RPCConstants.java
URL: 
http://svn.apache.org/viewvc/incubator/woden/java/src/org/apache/woden/internal/wsdl20/extensions/rpc/RPCConstants.java?rev=419295&r1=419294&r2=419295&view=diff
==============================================================================
--- 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/extensions/rpc/RPCConstants.java
 (original)
+++ 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/extensions/rpc/RPCConstants.java
 Wed Jul  5 10:41:21 2006
@@ -16,6 +16,8 @@
 
 package org.apache.woden.internal.wsdl20.extensions.rpc;
 
+import java.net.URI;
+
 import javax.xml.namespace.QName;
 
 /**
@@ -32,6 +34,7 @@
        // Style URI
 
        public static final String STYLE_URI_RPC = 
"http://www.w3.org/2006/01/wsdl/style/rpc";;
+    public static final URI URI_STYLE_RPC = 
URI.create("http://www.w3.org/2006/01/wsdl/style/rpc";);
        
        // Attribute name
 

Modified: 
incubator/woden/java/test/org/apache/woden/wsdl20/extensions/http/HTTPBindingMessageReferenceExtensionsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/woden/java/test/org/apache/woden/wsdl20/extensions/http/HTTPBindingMessageReferenceExtensionsTest.java?rev=419295&r1=419294&r2=419295&view=diff
==============================================================================
--- 
incubator/woden/java/test/org/apache/woden/wsdl20/extensions/http/HTTPBindingMessageReferenceExtensionsTest.java
 (original)
+++ 
incubator/woden/java/test/org/apache/woden/wsdl20/extensions/http/HTTPBindingMessageReferenceExtensionsTest.java
 Wed Jul  5 10:41:21 2006
@@ -157,29 +157,4 @@
         
     }
     
-    /**
-     * Test that an HTTPBindingMessageReferenceExtensions object is not created
-     * for a binding operation wsdl:input or wsdl:output message that does not 
-     * contain any HTTP extension extension attributes or elements (i.e. the
-     * HTTP extension properties are OPTIONAL in the spec, so even though 
-     * {http transfer coding} defaults to {http transfer coding default} in
-     * BindingOperation, it will not be present if the underlying message ref
-     * element has not HTTP extensions).
-     */
-    public void testOptional() {
-        
-        BindingMessageReference[] bindMsgRefs = 
fBindOpers[1].getBindingMessageReferences();
-        assertEquals("The second BindingOperation should contain 1 
BindingMessageReference components.", 1, bindMsgRefs.length);
-        
-        BindingMessageReference inputMsg = bindMsgRefs[0];
-        HTTPBindingMessageReferenceExtensions httpBindMsgRefExts = 
-            (HTTPBindingMessageReferenceExtensions) inputMsg
-                .getComponentExtensionsForNamespace(
-                    ComponentExtensions.URI_NS_HTTP);
-        
-        assertNull("The BindingMessageReference contained an " +
-                "HTTPBindingMessageReferenceExtensions object.",
-                httpBindMsgRefExts);
-    }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to