You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/07/27 11:05:26 UTC

svn commit: r979597 - in /tuscany/sca-java-2.x/trunk/modules: assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java

Author: slaws
Date: Tue Jul 27 09:05:26 2010
New Revision: 979597

URL: http://svn.apache.org/viewvc?rev=979597&view=rev
Log:
Some defensive code to avert an NPE that's now causing ASM_8005, ASM_8017, ASM_8018 to fail. It's not clear why this code is being hit now when it wasn't previously. 

Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties?rev=979597&r1=979596&r2=979597&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties Tue Jul 27 09:05:26 2010
@@ -81,3 +81,5 @@ PropertyValueDoesNotMatchComplexType = [
 PropertyValueDoesNotMatchElement = [ASM50029] The property {0} on component {1} has a value which does not match the element {2} with which it is associated. Validation reported {3}
 EPRIncompatibleInterface = [BWS20007] The reference interface is incompatible with the interface of the reference binding {0}
 EPIncompatibleInterface = [BWS20007] The service interface is incompatible with the interface of the service binding {0}
+PromotedCallbackReferenceNotFound = For component {0} and service {1} the promoted component {2} does not have a callback reference called {3} which should have been created automatically by Tuscany
+PromotedCallbackServiceNotFound = For component {0} and reference {1} the promoted component {2} does not have a callback service called {3} which should have been created automatically by Tuscany

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java?rev=979597&r1=979596&r2=979597&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java Tue Jul 27 09:05:26 2010
@@ -270,7 +270,7 @@ public class ComponentBuilderImpl {
             calculateBindings(component, componentService, componentTypeService, context);
 
             // add callback reference model objects
-            createCallbackReference(component, componentService);
+            createCallbackReference(component, componentService, monitor);
         }
     }
 
@@ -312,7 +312,7 @@ public class ComponentBuilderImpl {
             calculateBindings(componentReference, componentTypeReference);
 
             // add callback service model objects
-            createCallbackService(component, componentReference);
+            createCallbackService(component, componentReference, monitor);
 
             // Propagate autowire setting from the component down the structural 
             // hierarchy
@@ -1156,12 +1156,12 @@ public class ComponentBuilderImpl {
      * @param component
      * @param service
      */
-    private void createCallbackReference(Component component, ComponentService service) {
+    private void createCallbackReference(Component component, ComponentService service, Monitor monitor) {
 
         // if the service has a callback interface create a reference
         // to represent the callback 
         if (service.getInterfaceContract() != null && // can be null in unit tests
-        service.getInterfaceContract().getCallbackInterface() != null) {
+            service.getInterfaceContract().getCallbackInterface() != null) {
 
             ComponentReference callbackReference = assemblyFactory.createComponentReference();
             callbackReference.setForCallback(true);
@@ -1197,7 +1197,19 @@ public class ComponentBuilderImpl {
                     if (((CompositeService)implService).getPromotedService().isUnresolved() == false){
                         String referenceName = ((CompositeService)implService).getPromotedService().getName();
                         ComponentReference promotedReference = ((CompositeService)implService).getPromotedComponent().getReference(referenceName);
-                        implCompReference.getPromotedReferences().add(promotedReference);
+                        
+                        if (promotedReference != null){
+                            implCompReference.getPromotedReferences().add(promotedReference);
+                        } else {
+                            Monitor.error(monitor,
+                                          this,
+                                          Messages.ASSEMBLY_VALIDATION,
+                                          "PromotedCallbackReferenceNotFound",
+                                          component.getName(),
+                                          service.getName(),
+                                          ((CompositeService)implService).getPromotedComponent().getName(),
+                                          referenceName);
+                        }
                     }                 
                     implReference = implCompReference;
                     
@@ -1263,7 +1275,7 @@ public class ComponentBuilderImpl {
      * @param component
      * @param service
      */
-    private void createCallbackService(Component component, ComponentReference reference) {
+    private void createCallbackService(Component component, ComponentReference reference, Monitor monitor) {
         if (reference.getInterfaceContract() != null && // can be null in unit tests
             reference.getInterfaceContract().getCallbackInterface() != null) {
             ComponentService callbackService = assemblyFactory.createComponentService();
@@ -1299,7 +1311,19 @@ public class ComponentBuilderImpl {
                     if (((CompositeReference)implReference).getPromotedReferences().get(0).isUnresolved() == false){
                         String serviceName = ((CompositeReference)implReference).getPromotedReferences().get(0).getName();
                         ComponentService promotedService = ((CompositeReference)implReference).getPromotedComponents().get(0).getService(serviceName);
-                        implCompService.setPromotedService(promotedService);
+                        
+                        if (promotedService != null){
+                            implCompService.setPromotedService(promotedService);
+                        } else {
+                            Monitor.error(monitor,
+                                          this,
+                                          Messages.ASSEMBLY_VALIDATION,
+                                          "PromotedCallbackServiceNotFound",
+                                          component.getName(),
+                                          reference.getName(),
+                                          ((CompositeReference)implReference).getPromotedComponents().get(0).getName(),
+                                          serviceName);
+                        }
                     }
                     
                     implService = implCompService;