Author: slaws
Date: Mon Oct 17 12:55:31 2011
New Revision: 1185139

URL: http://svn.apache.org/viewvc?rev=1185139&view=rev
Log:
TUSCANY-3959 - Correct interface matching so that it takes account of 
mayProvides intents. 

Added:
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite
Modified:
    
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
    
tuscany/sca-java-2.x/trunk/testing/itest/policies/src/main/resources/Payment.composite

Modified: 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java?rev=1185139&r1=1185138&r2=1185139&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
 Mon Oct 17 12:55:31 2011
@@ -444,11 +444,11 @@ public class EndpointReferenceBinderImpl
             // TUSCANY-3873 - add policy from the service
             //                we don't care about intents at this stage
             
endpointReference.getPolicySets().addAll(matchedEndpoint.getPolicySets());
+            
             // TODO - we need to re-run the appliesTo processing here but 
there is some question about what 
             //        appliesTo means. It's also difficult to get to the 
PolicyAppliesToBuilder from here and
             //        need a new EntensionInterface to support access. So for 
now I'm just cheating and looking to 
             //        see if the XPath expression contains the binding type as 
a string while we discuss appliesTo
-            
             List<PolicySet> psToRemove = new ArrayList<PolicySet>();
             
             for (PolicySet ps : endpointReference.getPolicySets() ) {
@@ -765,18 +765,14 @@ public class EndpointReferenceBinderImpl
             systemDefinitions = 
((RuntimeEndpoint)endpoint).getCompositeContext().getSystemDefinitions();
         }
         
-        for (BindingType loopBindingType : 
systemDefinitions.getBindingTypes()){
-            if (loopBindingType.getType().equals(binding.getType())){
-                bindingType = loopBindingType;
-                break;
-            }
-        }
+        bindingType = systemDefinitions.getBindingType(binding.getType());
         
         // Before we start examining intents, remove any whose constrained
         // types don't include the binding type
         removeConstrainedIntents(endpointReference, bindingType);
         
         List<Intent> eprIntents = new ArrayList<Intent>();
+        List<Intent> eprMayProvideInterationIntents = new ArrayList<Intent>();
         eprIntents.addAll(endpointReference.getRequiredIntents());
         
         // first check the binding type
@@ -787,6 +783,9 @@ public class EndpointReferenceBinderImpl
             } else if (bindingType != null &&
                        bindingType.getMayProvidedIntents().contains(intent)){
                 eprIntents.remove(intent);
+                if (intent.getType().equals(Intent.Type.interaction)){
+                    eprMayProvideInterationIntents.add(intent);
+                }
             } else {
                // TODO - this code also appears in the ComponentPolicyBuilder
                //        so should rationalize
@@ -820,7 +819,29 @@ public class EndpointReferenceBinderImpl
             matchAudit.append("No match because there are unresolved intents " 
+ eprIntents.toString() + " ");
             matchAudit.appendSeperator();
             return false;
-        }   
+        }  
+        
+        // TUSCANY-3959 - something that's not explicitly stated in the spec. 
mayProvides intents don't
+        //                don't lead to policy sets as the binding natively 
implements the intent. So 
+        //                we need to check that these intents match explicitly 
between reference and service
+        //                sides
+        if (eprMayProvideInterationIntents.size() > 0){
+            for (Intent eprIntent : eprMayProvideInterationIntents){
+                boolean match = false;
+                for (Intent epIntent : endpoint.getRequiredIntents()){
+                    if (epIntent.equals(eprIntent)){
+                        match = true;
+                        break;
+                    }
+                }
+                
+                if (!match){
+                    matchAudit.append("No match because the reference has a 
mayProvide intent that the service doesn't have " + eprIntent.getName());
+                    matchAudit.appendSeperator();
+                    return false;
+                }
+            }
+        }
         
         // if there are no policies on epr or ep side then 
         // they match
@@ -932,7 +953,7 @@ public class EndpointReferenceBinderImpl
                
                 if (constrainedTypes.size() > 0){               
                     boolean constraintFound = false;
-                    for (ExtensionType constrainedType : 
i.getConstrainedTypes()){
+                    for (ExtensionType constrainedType : constrainedTypes){
                         if 
(constrainedType.getType().equals(bindingType.getType()) ||
                             
constrainedType.getType().equals(bindingType.getBaseType())){
                             constraintFound = true;

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite?rev=1185139&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite
 Mon Oct 17 12:55:31 2011
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, 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.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912";
+           xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912"; 
+           xmlns:foo="http://foo"; targetNamespace="http://foo";
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+           name="MissmatchPolicyDistributedClient" >
+
+    <component name="DistributedClientComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.itest.interfaces.ClientComponentImpl" />
+        <reference name="aCallBackService" 
target="DistributedServiceComponent" requires="sca:SOAP.v1_2"/>
+    </component> 
+    
+</composite>
\ No newline at end of file

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite?rev=1185139&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/resources/org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite
 Mon Oct 17 12:55:31 2011
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, 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.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"; 
+           xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912";
+           xmlns:foo="http://foo"; targetNamespace="http://foo";
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+           name="MissmatchPolicyDistributedService" >
+    
+    <component name="DistributedServiceComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.itest.interfaces.ServiceComponentImpl" />       
+        <service name="ServiceComponent" requires="authentication">
+            <binding.ws/>
+        </service>
+    </component>  
+</composite>
\ No newline at end of file

Modified: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java?rev=1185139&r1=1185138&r2=1185139&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
 Mon Oct 17 12:55:31 2011
@@ -201,6 +201,45 @@ public class InerfaceMissmatchTestCase {
             node2.stop();
             Assert.assertTrue(ex.getMessage().startsWith("Unable to bind []"));
         }
-
     }
+    
+    /**
+     * Remotable client and service interfaces where the interfaces match and 
the service and reference
+     * have missmatching policy.
+     * Components running in the separate composite/JVM, i.e. there is a 
remote registry
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testPolicyDistributedRemotable() throws Exception {
+        
+        
+        String [] contributions = {"./target/classes"};
+        Node node1 = 
NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                                                                     
"org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedClient.composite",
 
+                                                                     
contributions);
+        node1.start();
+
+        Node node2 = 
NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                                                                     
"org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchPolicyDistributedService.composite",
 
+                                                                     
contributions);
+        // force binding.ws on node2 to use a different port from node 1(which 
will default to 8080
+        
((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, 
"http://localhost:8081/";);
+        node2.start();
+        
+        ClientComponent local = node1.getService(ClientComponent.class, 
"DistributedClientComponent");
+        ParameterObject po = new ParameterObject();
+        
+        try {
+            String response = local.foo1(po);
+            node1.stop();
+            node2.stop();            
+            Assert.fail("Expected exception indicating that interfaces don't 
match");
+        } catch (ServiceRuntimeException ex){
+            node1.stop();
+            node2.stop();
+            Assert.assertTrue(ex.getMessage().startsWith("Unable to bind []"));
+        }
+        
+    }     
 }

Modified: 
tuscany/sca-java-2.x/trunk/testing/itest/policies/src/main/resources/Payment.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/policies/src/main/resources/Payment.composite?rev=1185139&r1=1185138&r2=1185139&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/policies/src/main/resources/Payment.composite
 (original)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/policies/src/main/resources/Payment.composite
 Mon Oct 17 12:55:31 2011
@@ -36,8 +36,7 @@
     <component name="Payment">
         <implementation.java 
class="org.apache.tuscany.sca.itest.policies.impl.PaymentImpl" />
         <reference name="creditCardPayment">
-            <binding.sca requires="sca:integrity tuscany:logging" 
uri="CreditCardPayment">
-            </binding.sca>
+            <binding.sca requires="sca:integrity.transport tuscany:logging" 
uri="CreditCardPayment"/>
         </reference>
         <reference name="customerRegistry" target="Customer/Registry" 
requires="sca:suspendsTransaction tuscany:logging"/>
     </component>


Reply via email to