1   package org.controlhaus.xfire.client;
2   
3   import org.apache.beehive.controls.api.bean.Control;
4   import org.apache.beehive.controls.api.events.EventHandler;
5   import org.apache.xmlbeans.XmlObject;
6   import org.codehaus.xfire.fault.XFireFault;
7   import org.controlhaus.xfire.client.XFireClientControl.Encoding;
8   import org.controlhaus.xfire.client.XFireClientControl.ServiceUrl;
9   
10  /***
11   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
12   * @since Nov 5, 2004
13   */
14  public class XFireClientControlTest
15      extends AbstractControlTest
16  {
17      @Encoding("ENC")
18      @ServiceUrl("http://soap.amazon.com/onca/soap?Service=AWSECommerceService")
19      @Control XFireClientControl client;
20  
21      @ServiceUrl("http://soap.amazon.com/onca/soap?Service=AWSECommerceService")
22      @Control XFireClientControl noEncClient;
23  
24      private boolean receivedResponse = false;
25      private XmlObject[] response;
26      
27      public void testProperties() 
28          throws Exception
29      {
30          assertNotNull(client);
31          
32          XFireClientControlBean bean = (XFireClientControlBean) client;
33          assertEquals("ENC", bean.getEncodingValue());
34          assertEquals("http://soap.amazon.com/onca/soap?Service=AWSECommerceService", bean.getServiceUrlValue());
35          
36          assertNotNull(noEncClient);
37          
38          bean = (XFireClientControlBean) noEncClient;
39          assertEquals("UTF-8", bean.getEncodingValue());
40          assertEquals("http://soap.amazon.com/onca/soap?Service=AWSECommerceService", 
41                       bean.getServiceUrlValue());
42      }
43      
44      public void testInvoke() 
45          throws Exception
46      {
47          assertNotNull(client);
48  
49          XmlObject request = XmlObject.Factory.parse( getClass().getResourceAsStream("amazon.xml") );
50          
51          response = client.invoke( new XmlObject[] { request } );
52          assertNotNull(response);
53          assertEquals(1, response.length);
54          assertEquals("ItemLookupResponse", response[0].getDomNode().getFirstChild().getLocalName());
55      }
56      
57      public void testAsyncInvoke() 
58  	    throws Exception
59  	{
60  	    assertNotNull(client);
61  	
62  	    XmlObject request = XmlObject.Factory.parse( getClass().getResourceAsStream("amazon.xml") );
63  	    
64  	    client.beginInvoke( new XmlObject[] { request }, null );
65  	    
66  	    for ( int i = 0; i < 60; i++ )
67  	    {
68  	        if ( !receivedResponse )
69  	            wait(500);
70  	        else
71  	            break;
72  	    }
73  	    
74  	    if ( !receivedResponse )
75  	        fail("Didn't receive async response.");
76  	    
77  	    assertNotNull(response);
78          assertEquals(1, response.length);
79          assertEquals("ItemLookupResponse", response[0].getDomNode().getFirstChild().getLocalName());
80  	}
81      
82      @EventHandler(field="client",eventSet=XFireClientControl.EndInvokeCallback.class,eventName="endInvoke")
83      public void endInvoke( XmlObject[] response, XmlObject[] responseHeaders )
84      {
85          receivedResponse = true;
86          this.response = response;
87      }
88      
89      @EventHandler(field="client",eventSet=XFireClientControl.EndInvokeCallback.class,eventName="handleFault")
90      public void handleFault( XFireFault fault )
91      {
92          receivedResponse = true;
93      }
94  }