You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ed...@apache.org on 2008/05/08 22:55:17 UTC

svn commit: r654619 - in /incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel: impl/BPELDocumentProcessor.java impl/BPELImplementationProcessor.java xml/BPELPartnerLinkElement.java

Author: edwardsmj
Date: Thu May  8 13:53:54 2008
New Revision: 654619

URL: http://svn.apache.org/viewvc?rev=654619&view=rev
Log:
Fixes with additional checks for exception situations in processing BPEL process files.

Modified:
    incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
    incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
    incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELPartnerLinkElement.java

Modified: incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java?rev=654619&r1=654618&r2=654619&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELDocumentProcessor.java Thu May  8 13:53:54 2008
@@ -153,17 +153,20 @@
     		if ( theImport.getImportType().equals("http://schemas.xmlsoap.org/wsdl/") ) {
     			String WSDLLocation = theImport.getLocation();
     			String WSDLNamespace = theImport.getNamespace();
-    			// FIXME both Location & Namespace attributes are optional - for the present
-    			// we don't deal with these cases - they are skipped
-    			if ( WSDLLocation == null || WSDLNamespace == null ) continue;
+    			
     			// Resolve the WSDL definition
                 WSDLDefinition proxy = WSDLfactory.createWSDLDefinition();
                 proxy.setUnresolved(true);
                 proxy.setNamespace(WSDLNamespace);
-                proxy.setLocation(URI.create(WSDLLocation));
+                if ( WSDLLocation != null ) proxy.setLocation(URI.create(WSDLLocation));
                 WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.class, proxy);
                 if (resolved != null && !resolved.isUnresolved()) {
                     theImport.setWSDLDefinition( resolved );
+                } else {
+                	throw new ContributionResolveException("BPELDocumentProcessor:resolve -" +
+                			" unable to resolve WSDL referenced by BPEL import" +
+                			"WSDL location: " + WSDLLocation + " WSDLNamespace: " +
+                			WSDLNamespace );
                 } // end if	
     		} // end if
     	} // end for

Modified: incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java?rev=654619&r1=654618&r2=654619&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/impl/BPELImplementationProcessor.java Thu May  8 13:53:54 2008
@@ -181,7 +181,8 @@
     
     // Calculates the component type of the supplied implementation and attaches it to the
     // implementation
-    private void generateComponentType(BPELImplementation impl ) {
+    private void generateComponentType(BPELImplementation impl ) 
+    	throws ContributionResolveException {
         // Create a ComponentType and mark it unresolved
         ComponentType componentType = assemblyFactory.createComponentType();
         componentType.setUnresolved(true);
@@ -226,11 +227,30 @@
      * @return
      */
     private Reference generateReference( String name, PortType myRolePT, 
-    		PortType partnerRolePT, Collection<WSDLInterface> theInterfaces  ) {
+    		PortType partnerRolePT, Collection<WSDLInterface> theInterfaces  ) 
+    		throws ContributionResolveException {
         Reference reference = assemblyFactory.createReference();
         WSDLInterfaceContract interfaceContract = wsdlFactory.createWSDLInterfaceContract();
         reference.setInterfaceContract(interfaceContract);
         
+        // Establish whether there is just a call interface or a call + callback interface
+        PortType callPT = null;
+        PortType callbackPT = null;
+        if( myRolePT != null ) {
+        	callPT = myRolePT;
+        	if( partnerRolePT != null ) {
+        		if( !myRolePT.equals(partnerRolePT) ){
+        			callbackPT = partnerRolePT;
+        		} // end if
+        	} // end if
+        } else if ( partnerRolePT != null ) {
+        	callPT = partnerRolePT;
+        } // end if
+        // No interfaces mean an error - throw an exception
+        if( callPT == null && callbackPT == null ) {
+        	throw new ContributionResolveException("Error: myRole and partnerRole port types are both null");
+        } // end if 
+        
         // Set the name of the reference to the supplied name and the multiplicity of the reference
         // to 1..1 
         // TODO: support other multiplicities 
@@ -240,20 +260,28 @@
         // Set the call interface and, if present, the callback interface
         WSDLInterface callInterface = null;
         for( WSDLInterface anInterface : theInterfaces ) {
-        	if( anInterface.getPortType().equals(myRolePT)) callInterface = anInterface;
+        	if( anInterface.getPortType().equals(callPT)) callInterface = anInterface;
         } // end for
-        //TODO need to throw an exception here if no interface is found
+        // Throw an exception if no interface is found
+        if( callInterface == null ) {
+        	throw new ContributionResolveException("Interface not found for port type " +
+        			callPT.getQName().toString() );
+        } // end if 
         reference.getInterfaceContract().setInterface(callInterface);
  
         // There is a callback if the partner role is not null and if the partner role port type
         // is not the same as the port type for my role
-        if (partnerRolePT != null && !myRolePT.equals(partnerRolePT) ) {
+        if ( callbackPT != null ) {
             WSDLInterface callbackInterface = null;
             for( WSDLInterface anInterface : theInterfaces ) {
-            	if( anInterface.getPortType().equals(myRolePT)) callbackInterface = anInterface;
+            	if( anInterface.getPortType().equals(callbackPT)) callbackInterface = anInterface;
             } // end for
-            //TODO need to throw an exception here if no interface is found
-             reference.getInterfaceContract().setCallbackInterface(callbackInterface);
+            // Throw an exception if no interface is found
+            if( callbackInterface == null ) {
+            	throw new ContributionResolveException("Interface not found for port type " +
+            			callbackPT.getQName().toString() );
+            } // end if 
+            reference.getInterfaceContract().setCallbackInterface(callbackInterface);
         } // end if
     	
     	return reference;
@@ -268,30 +296,60 @@
      * @return
      */
     private Service generateService( String name, PortType myRolePT, 
-    		PortType partnerRolePT, Collection<WSDLInterface> theInterfaces ) {
+    		PortType partnerRolePT, Collection<WSDLInterface> theInterfaces ) 
+    		throws ContributionResolveException {
         Service service = assemblyFactory.createService();
         WSDLInterfaceContract interfaceContract = wsdlFactory.createWSDLInterfaceContract();
         service.setInterfaceContract(interfaceContract);
         
         // Set the name of the service to the supplied name 
         service.setName(name);
+        
+        // Establish whether there is just a call interface or a call + callback interface
+        PortType callPT = null;
+        PortType callbackPT = null;
+        if( myRolePT != null ) {
+        	callPT = myRolePT;
+        	if( partnerRolePT != null ) {
+        		if( !myRolePT.equals(partnerRolePT) ){
+        			callbackPT = partnerRolePT;
+        		} // end if
+        	} // end if
+        } else if ( partnerRolePT != null ) {
+        	callPT = partnerRolePT;
+        } // end if
+        // No interfaces mean an error - throw an exception
+        if( callPT == null && callbackPT == null ) {
+        	throw new ContributionResolveException("Error: myRole and partnerRole port types are both null");
+        } // end if 
+
 
         // Set the call interface and, if present, the callback interface
         WSDLInterface callInterface = null;
         for( WSDLInterface anInterface : theInterfaces ) {
-        	if( anInterface.getPortType().equals(myRolePT)) callInterface = anInterface;
+        	if( anInterface.getPortType().equals(callPT)) callInterface = anInterface;
         } // end for
-        //TODO need to throw an exception here if no interface is found
+        // Throw an exception if no interface is found
+        if( callInterface == null ) {
+        	throw new ContributionResolveException("Interface not found for port type " +
+        			callPT.getQName().toString() );
+        } // end if 
+
         service.getInterfaceContract().setInterface(callInterface);    
         
         // There is a callback if the partner role is not null and if the partner role port type
         // is not the same as the port type for my role
-        if (partnerRolePT != null && !myRolePT.equals(partnerRolePT) ) {
+        if ( callbackPT != null ) {
             WSDLInterface callbackInterface = null;
             for( WSDLInterface anInterface : theInterfaces ) {
-            	if( anInterface.getPortType().equals(myRolePT)) callbackInterface = anInterface;
+            	if( anInterface.getPortType().equals(callbackPT)) callbackInterface = anInterface;
             } // end for
-            //TODO need to throw an exception here if no interface is found
+            // Throw an exception if no interface is found
+            if( callbackInterface == null ) {
+            	throw new ContributionResolveException("Interface not found for port type " +
+            			callbackPT.getQName().toString() );
+            } // end if 
+
             service.getInterfaceContract().setCallbackInterface(callbackInterface);
         } // end if
     	

Modified: incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELPartnerLinkElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELPartnerLinkElement.java?rev=654619&r1=654618&r2=654619&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELPartnerLinkElement.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/xml/BPELPartnerLinkElement.java Thu May  8 13:53:54 2008
@@ -77,9 +77,10 @@
     }
     
     private PortType getRolePortType( String theRole ) {
-    	if ( pLinkType.getRole1Name().equals(theRole) ) {
+    	if( theRole == null ) return null;
+    	if ( theRole.equals( pLinkType.getRole1Name() ) ) {
     		return pLinkType.getRole1pType();
-    	} else if ( pLinkType.getRole2Name().equals(theRole) ) {
+    	} else if ( theRole.equals( pLinkType.getRole2Name() ) ) {
     		return pLinkType.getRole2pType();
     	} // end if 
     	return null;