Author: rineholt
Date: Thu Dec  7 09:23:10 2006
New Revision: 483558

URL: http://svn.apache.org/viewvc?view=rev&rev=483558
Log:
fix up sequence in message.
add to conversation test some testing of state

Added:
    
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/resources/wsdl/loanappconversation.wsdl
Modified:
    
incubator/tuscany/java/samples/sca/loanappconversationWS/src/main/resources/wsdl/loanappconversation.wsdl
    
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanAppConversationClient.java
    
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClient.java
    
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClientImpl.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java

Modified: 
incubator/tuscany/java/samples/sca/loanappconversationWS/src/main/resources/wsdl/loanappconversation.wsdl
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/loanappconversationWS/src/main/resources/wsdl/loanappconversation.wsdl?view=diff&rev=483558&r1=483557&r2=483558
==============================================================================
--- 
incubator/tuscany/java/samples/sca/loanappconversationWS/src/main/resources/wsdl/loanappconversation.wsdl
 (original)
+++ 
incubator/tuscany/java/samples/sca/loanappconversationWS/src/main/resources/wsdl/loanappconversation.wsdl
 Thu Dec  7 09:23:10 2006
@@ -71,10 +71,7 @@
                        <xsd:element name="cancelApplication">
                          <xsd:complexType/>
             </xsd:element>
-                       <xsd:element name="cancelApplicationResponse">
-                         <xsd:complexType/>
-            </xsd:element>
-
+            
                        <xsd:element name="getLoanStatus">
                          <xsd:complexType/>
             </xsd:element>
@@ -105,6 +102,11 @@
                          <xsd:complexType/>
             </xsd:element>
 
+                       <xsd:element name="closeResponse">
+                         <xsd:complexType/>
+            </xsd:element>
+
+
                </xsd:schema>
        </wsdl:types>
        
@@ -130,12 +132,7 @@
        <wsdl:message name="cancelApplicationRequest">
                <wsdl:part element="loanservice:cancelApplication" 
name="cancelApplicationRequest" />
        </wsdl:message>
-
-       <wsdl:message name="cancelApplicationResponse">
-               <wsdl:part element="loanservice:cancelApplicationResponse"
-                       name="cancelApplicationResponse" />
-       </wsdl:message>
-
+       
        <wsdl:message name="getLoanStatusRequest">
                <wsdl:part element="loanservice:getLoanStatus" 
name="getLoanStatusRequest" />
        </wsdl:message>
@@ -159,6 +156,10 @@
                <wsdl:part element="loanservice:close" name="closeRequest" />
        </wsdl:message>
        
+       <wsdl:message name="closeResponse">
+               <wsdl:part element="loanservice:close" name="closeResponse" />
+       </wsdl:message>
+
 
        <wsdl:portType name="LoanService">
                <wsdl:operation name="apply">
@@ -173,7 +174,6 @@
 
                <wsdl:operation name="cancelApplication">
                        <wsdl:input 
message="loanservice:cancelApplicationRequest" />
-                       <wsdl:output 
message="loanservice:cancelApplicationResponse" />
                </wsdl:operation>
 
                <wsdl:operation name="getLoanStatus">
@@ -188,7 +188,7 @@
 
                <wsdl:operation name="close">
                        <wsdl:input message="loanservice:closeRequest" />
-                       <wsdl:output message="loanservice:displayResponse" />
+                       <wsdl:output message="loanservice:closeResponse" />
                </wsdl:operation>
 
        </wsdl:portType>
@@ -224,9 +224,6 @@
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
-                       <wsdl:output>
-                               <soap:body use="literal" />
-                       </wsdl:output>
                </wsdl:operation>
 
                <wsdl:operation name="getLoanStatus">
@@ -271,4 +268,4 @@
                                
location="http://localhost:8080/sample-loanappconversationWS/services/LoanService";
 />
                </wsdl:port>
        </wsdl:service>
-</wsdl:definitions>
+</wsdl:definitions>
\ No newline at end of file

Modified: 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanAppConversationClient.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanAppConversationClient.java?view=diff&rev=483558&r1=483557&r2=483558
==============================================================================
--- 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanAppConversationClient.java
 (original)
+++ 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanAppConversationClient.java
 Thu Dec  7 09:23:10 2006
@@ -18,6 +18,7 @@
  */
 package loanappconversation;
 
+//import org.apache.tuscany.spi.component.TargetNotFoundException;
 import org.osoa.sca.CompositeContext;
 import org.osoa.sca.CurrentCompositeContext;
 
@@ -28,8 +29,29 @@
         CompositeContext context = CurrentCompositeContext.getContext();
 
         LoanClient loanClient = context.locateService(LoanClient.class, 
"LoanClientComponent");
+        assert loanClient != null : "loanClient was not resolved!";
         loanClient.applyForLoan("John Doe", 1000.0f);
-        System.out.println(loanClient.displayLoan());
-        System.out.println("Loan approved: " + loanClient.isApproved());
+        assert loanClient.isOpen() : "Failed loan not in approved state";
+        System.out.println("Loan opened: " + loanClient.displayLoan());
+        
+        
+        loanClient.cancelLoan();
+        System.out.println("Sleeping to let cancel complete ...");
+        Thread.sleep(5000);
+        
+        assert loanClient.isCancelled() : "Failed to cancel loan";
+        System.out.println("Cancelled: " + loanClient.displayLoan());
+        
+        loanClient.closeLoan();
+        
+        System.out.println("Closing for a second time!");
+        try{
+            loanClient.closeLoan();
+            assert false : "close for second time incorrectly succeed";
+            System.out.println("Failed: close for second time incorrectly 
succeed.");
+        }catch(Exception e){
+            System.out.println("Second close successfully produced: '" + 
e.getClass().getName() +"'");
+        }
+        
     }
 }

Modified: 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClient.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClient.java?view=diff&rev=483558&r1=483557&r2=483558
==============================================================================
--- 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClient.java
 (original)
+++ 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClient.java
 Thu Dec  7 09:23:10 2006
@@ -22,6 +22,8 @@
 
     void applyForLoan(String customerName, float amount);
     boolean isApproved();
+    boolean isOpen();
+    boolean isCancelled();
     String displayLoan();
     void cancelLoan();
     void closeLoan();

Modified: 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClientImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClientImpl.java?view=diff&rev=483558&r1=483557&r2=483558
==============================================================================
--- 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClientImpl.java
 (original)
+++ 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/java/loanappconversation/LoanClientImpl.java
 Thu Dec  7 09:23:10 2006
@@ -24,6 +24,19 @@
     
     private LoanService loanService;
     
+    public boolean isApproved() {
+        return "approved".equals(loanService.getLoanStatus());
+    }
+
+    public boolean isOpen() {
+        return "open".equals(loanService.getLoanStatus());
+        
+    }
+
+    public boolean isCancelled() {
+       return "cancelled".equals(loanService.getLoanStatus());
+    }
+
     @Reference
     public void setLoanService(LoanService loanService) {
         this.loanService = loanService;
@@ -32,10 +45,6 @@
     public void applyForLoan(String customerName, float amount) {
        //prim loanService.apply(new LoanApplication(customerName, amount));
         loanService.apply(customerName, amount);
-    }
-    
-    public boolean isApproved() {
-        return loanService.getLoanStatus().equals("approved");
     }
     
     public String displayLoan() {

Added: 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/resources/wsdl/loanappconversation.wsdl
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/resources/wsdl/loanappconversation.wsdl?view=auto&rev=483558
==============================================================================
--- 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/resources/wsdl/loanappconversation.wsdl
 (added)
+++ 
incubator/tuscany/java/samples/sca/loanappconversationWSClient/src/main/resources/wsdl/loanappconversation.wsdl
 Thu Dec  7 09:23:10 2006
@@ -0,0 +1,271 @@
+<?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
+ * "License"); you may not use this file except in compliance
+ * 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.    
+-->
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+       xmlns:loanservice="http://www.loanappconversation.com/loanservice";
+       targetNamespace="http://www.loanappconversation.com/loanservice";
+       name="LoanService">
+
+       <wsdl:types>
+               <xsd:schema 
targetNamespace="http://www.loanappconversation.com/loanservice";
+                       xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+                       
xmlns:loanservice="http://www.loanappconversation.com/loanservice";
+                       >
+                       
+
+                       <xsd:element name="apply">
+                               <xsd:complexType>
+                                       <xsd:sequence>
+                                       <xsd:element name="customerName"
+                                               type="xsd:string" />
+                                       <xsd:element name="loanAmount"
+                                               type="xsd:float"  />
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+                       <xsd:element name="applyResponse">
+                         <xsd:complexType/>
+            </xsd:element>
+<!--
+                       <xsd:complexType name="LoanApplication">
+                               <xsd:sequence>
+                                       <xsd:element name="customerName"
+                                               type="xsd:string"  />
+                                       <xsd:element name="loanAmount"
+                                               type="xsd:float" />
+                               </xsd:sequence>
+                       </xsd:complexType>
+-->
+                       
+                       <xsd:element name="lockCurrentRate">
+                               <xsd:complexType>
+                                       <xsd:sequence>
+                                               <xsd:element name="termInYears" 
type="xsd:int" />
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+
+
+                       <xsd:element name="lockCurrentRateResponse">
+                         <xsd:complexType/>
+            </xsd:element>
+
+                       <xsd:element name="cancelApplication">
+                         <xsd:complexType/>
+            </xsd:element>
+            
+                       <xsd:element name="getLoanStatus">
+                         <xsd:complexType/>
+            </xsd:element>
+                       <xsd:element name="getLoanStatusResponse">
+                               <xsd:complexType>
+                                       <xsd:sequence>
+                                               <xsd:element 
name="getLoanStatusReturn" type="xsd:string" />
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+
+                       <xsd:element name="display">
+                         <xsd:complexType/>
+            </xsd:element>
+                       
+
+                       <xsd:element name="displayResponse">
+                               <xsd:complexType>
+                                       <xsd:sequence>
+                                               <xsd:element 
name="displayReturn"
+                                                       type="xsd:string" />
+                                       </xsd:sequence>
+                               </xsd:complexType>
+                       </xsd:element>
+
+
+                       <xsd:element name="close">
+                         <xsd:complexType/>
+            </xsd:element>
+
+                       <xsd:element name="closeResponse">
+                         <xsd:complexType/>
+            </xsd:element>
+
+
+               </xsd:schema>
+       </wsdl:types>
+       
+       
+       <wsdl:message name="applyRequest">
+               <wsdl:part element="loanservice:apply"
+                       name="applyRequest" />
+       </wsdl:message>
+       <wsdl:message name="applyResponse">
+               <wsdl:part element="loanservice:applyResponse"
+                       name="applyResponse" />
+       </wsdl:message>
+
+       <wsdl:message name="lockCurrentRateRequest">
+               <wsdl:part element="loanservice:lockCurrentRate"
+                       name="lockCurrentRate" />
+       </wsdl:message>
+       <wsdl:message name="lockCurrentRateResponse">
+               <wsdl:part element="loanservice:lockCurrentRateResponse"
+                       name="lockCurrentRateResponse" />
+       </wsdl:message>
+
+       <wsdl:message name="cancelApplicationRequest">
+               <wsdl:part element="loanservice:cancelApplication" 
name="cancelApplicationRequest" />
+       </wsdl:message>
+       
+       <wsdl:message name="getLoanStatusRequest">
+               <wsdl:part element="loanservice:getLoanStatus" 
name="getLoanStatusRequest" />
+       </wsdl:message>
+
+       <wsdl:message name="getLoanStatusResponse">
+               <wsdl:part element="loanservice:getLoanStatusResponse"
+                       name="getLoanStatusResponse" />
+       </wsdl:message>
+
+       <wsdl:message name="displayRequest">
+               <wsdl:part element="loanservice:display"
+                       name="displayRequest" />
+       </wsdl:message>
+
+       <wsdl:message name="displayResponse">
+               <wsdl:part element="loanservice:displayResponse"
+                       name="displayResponse" />
+       </wsdl:message>
+
+       <wsdl:message name="closeRequest">
+               <wsdl:part element="loanservice:close" name="closeRequest" />
+       </wsdl:message>
+       
+       <wsdl:message name="closeResponse">
+               <wsdl:part element="loanservice:close" name="closeResponse" />
+       </wsdl:message>
+
+
+       <wsdl:portType name="LoanService">
+               <wsdl:operation name="apply">
+                       <wsdl:input message="loanservice:applyRequest" />
+                       <wsdl:output message="loanservice:applyResponse" />
+               </wsdl:operation>
+
+               <wsdl:operation name="lockCurrentRate">
+                       <wsdl:input 
message="loanservice:lockCurrentRateRequest" />
+                       <wsdl:output 
message="loanservice:lockCurrentRateResponse" />
+               </wsdl:operation>
+
+               <wsdl:operation name="cancelApplication">
+                       <wsdl:input 
message="loanservice:cancelApplicationRequest" />
+               </wsdl:operation>
+
+               <wsdl:operation name="getLoanStatus">
+                       <wsdl:input message="loanservice:getLoanStatusRequest" 
/>
+                       <wsdl:output 
message="loanservice:getLoanStatusResponse" />
+               </wsdl:operation>
+
+               <wsdl:operation name="display">
+                       <wsdl:input message="loanservice:displayRequest" />
+                       <wsdl:output message="loanservice:displayResponse" />
+               </wsdl:operation>
+
+               <wsdl:operation name="close">
+                       <wsdl:input message="loanservice:closeRequest" />
+                       <wsdl:output message="loanservice:closeResponse" />
+               </wsdl:operation>
+
+       </wsdl:portType>
+
+
+       <wsdl:binding name="LoanServiceSOAP" type="loanservice:LoanService">
+               <soap:binding style="document"
+                       transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="apply">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/apply"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+               <wsdl:operation name="lockCurrentRate">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/lockCurrentRate"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+
+               <wsdl:operation name="cancelApplication">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/cancelApplication"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+               </wsdl:operation>
+
+               <wsdl:operation name="getLoanStatus">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/getLoanStatus"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+
+               <wsdl:operation name="display">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/display"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+
+               <wsdl:operation name="close">
+                       <soap:operation
+                               
soapAction="http://www.loanappconversation.com/loanservice/close"; />
+                       <wsdl:input>
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output>
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+
+
+       </wsdl:binding>
+       <wsdl:service name="LoanService">
+               <wsdl:port binding="loanservice:LoanServiceSOAP"
+                       name="LoanServiceSOAP">
+                       <soap:address
+                               
location="http://localhost:8080/sample-loanappconversationWS/services/LoanService";
 />
+               </wsdl:port>
+       </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java?view=diff&rev=483558&r1=483557&r2=483558
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 Thu Dec  7 09:23:10 2006
@@ -20,9 +20,12 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 
 import javax.wsdl.Definition;
@@ -60,6 +63,7 @@
 import org.apache.tuscany.spi.wire.WireService;
 import org.osoa.sca.annotations.Destroy;
 
+// org.apache.tuscany.spi.model
 /**
  * An implementation of a [EMAIL PROTECTED] ServiceExtension} configured with 
the Axis2
  * binding
@@ -82,6 +86,8 @@
     private WorkContext workContext;
     
     private Boolean conversational= null;
+    
+    private Set<String> seenConversations= Collections.synchronizedSet( new 
HashSet<String>());
 
     public Axis2Service(String theName,
                         ServiceContract<?> serviceContract,
@@ -192,16 +198,12 @@
         }
         try {
             if (headInterceptor == null) {
-                try {
-                    // short-circuit the dispatch and invoke the target 
directly
-                    if (chain.getTargetInvoker() == null) {
-                        throw new AssertionError("No target invoker [" + 
chain.getOperation().getName() + "]");
-                    }
-                    return chain.getTargetInvoker().invokeTarget(args, 
TargetInvoker.NONE);
-                } catch (InvocationTargetException e) {
-                    // the cause was thrown by the target so throw it
-                    throw e;
+                // short-circuit the dispatch and invoke the target directly
+                TargetInvoker targetInvoker = chain.getTargetInvoker();
+                if (targetInvoker == null) {
+                    throw new AssertionError("No target invoker [" + 
chain.getOperation().getName() + "]");
                 }
+                return targetInvoker.invokeTarget(args, TargetInvoker.NONE);
             } else {
 
                 Message msg = new MessageImpl();
@@ -212,6 +214,29 @@
                 }
                 msg.setBody(args);
                 Message resp;
+                
+                if(isConversational()){
+                    
+                    
+                    int opSeq = op.getConversationSequence();
+                    if(opSeq == 
org.apache.tuscany.spi.model.Operation.CONVERSATION_END){
+                        assert seenConversations.contains(conversationID) : 
"End of conversation called when no conversation existed";
+                        msg.setConversationSequence(TargetInvoker.END);
+                        seenConversations.remove(conversationID); //if a fault 
occurs does the conversation end?
+                           //how do I know if a component called locally 
another opeation that ended this conversation?
+                        
+                    } else {
+                        boolean ec = 
seenConversations.contains(conversationID);
+                        if(ec){
+                          
+                            
msg.setConversationSequence(TargetInvoker.CONTINUE);
+                        }else{
+                            seenConversations.add(conversationID);
+                            msg.setConversationSequence(TargetInvoker.START);
+                        }
+                    }
+                    
+                }
                 // dispatch the wire down the chain and get the response
                 // TODO http://issues.apache.org/jira/browse/TUSCANY-777
                 ClassLoader oldtccl = 
Thread.currentThread().getContextClassLoader();



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

Reply via email to