Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: inout/InoutTest.java


1   /*
2    * The Apache Software License, Version 1.1
3    *
4    *
5    * Copyright (c) 2002 The Apache Software Foundation.  All rights 
6    * reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer. 
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution,
21   *    if any, must include the following acknowledgment:  
22   *       "This product includes software developed by the
23   *        Apache Software Foundation (http://www.apache.org/)."
24   *    Alternately, this acknowledgment may appear in the software itself,
25   *    if and wherever such third-party acknowledgments normally appear.
26   *
27   * 4. The names "WSIF" and "Apache Software Foundation" must
28   *    not be used to endorse or promote products derived from this
29   *    software without prior written permission. For written 
30   *    permission, please contact apache@apache.org.
31   *
32   * 5. Products derived from this software may not be called "Apache",
33   *    nor may "Apache" appear in their name, without prior written
34   *    permission of the Apache Software Foundation.
35   *
36   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47   * SUCH DAMAGE.
48   * ====================================================================
49   *
50   * This software consists of voluntary contributions made by many
51   * individuals on behalf of the Apache Software Foundation and was
52   * originally based on software copyright (c) 2001, 2002, International
53   * Business Machines, Inc., http://www.apache.org.  For more
54   * information on the Apache Software Foundation, please see
55   * <http://www.apache.org/>.
56   */
57  
58  package inout;
59  
60  import java.text.DateFormat;
61  import java.util.Date;
62  
63  import javax.xml.namespace.QName;
64  
65  import junit.framework.Test;
66  import junit.framework.TestCase;
67  import junit.framework.TestSuite;
68  import junit.textui.TestRunner;
69  import org.apache.wsif.WSIFException;
70  import org.apache.wsif.WSIFService;
71  import org.apache.wsif.WSIFServiceFactory;
72  import org.apache.wsif.base.WSIFServiceImpl;
73  import org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis;
74  import org.apache.wsif.providers.soap.apachesoap.WSIFDynamicProvider_ApacheSOAP;
75  import org.apache.wsif.util.WSIFPluggableProviders;
76  
77  import addressbook.wsiftypes.Address;
78  import addressbook.wsiftypes.Phone;
79  import inout.wsifservice.Inout;
80  import inout.wsiftypes.Mutablestring;
81  import util.AddressUtility;
82  import util.TestUtilities;
83  
84  /**
85   * Junit test to test out the Inout test
86   * @author Mark Whitlock
87   */
88  public class InoutTest extends TestCase {
89      String wsdlLocation =
90          TestUtilities.getWsdlPath("java\\test\\inout\\wsifservice") + "Inout.wsdl";
91      static String server = TestUtilities.getSoapServer().toUpperCase();
92      
93      static String name1 = "Purdue Boilermaker";
94      static Address addr1 =
95          new Address(
96              1,
97              "University Drive",
98              "West Lafayette",
99              "IN",
100             47907,
101             new Phone(765, "494", "4900"));
102 
103     static String firstName2 = "Someone";
104     static String lastName2 = "Else";
105     static String name2 = "Someone Else";
106     static Address addr2 =
107         new Address(
108             0,
109             "Somewhere Else",
110             "No Where",
111             "NO",
112             71983,
113             new Phone(600, "391", "5682"));
114 
115     static Address nulladdr = new Address(0, "", "", "", 0, new Phone(0, "", ""));
116 
117     private final static String ADDRESS = "address";
118     private final static String NULLNAME = "nullname";
119     private final static String ADD = "add";
120     private final static String DATE = "date";
121     private final static String SUPC = "supc";
122     private final static String GENC = "genericc";                                      
123     private final static String WHOAMI = "whoami";
124     private final static String INOUT = "inout";
125 
126     private final static String RPC = "rpc";
127     private final static String DOC = "doc";
128 
129     private final static String SOAP = "soap";
130     private final static String AXIS = "axis";
131     private final static String JAVA = "java";
132     private final static String NJMS = "nativeJMS";                                  
133 
134     public InoutTest(String name) {
135         super(name);
136     }
137 
138   public static void main(String[] args) {
139      TestUtilities.startListeners();  
140      junit.textui.TestRunner.run (suite());
141      TestUtilities.stopListeners();  
142     }
143 
144     public static Test suite() {
145         return new TestSuite(InoutTest.class);
146     }
147 
148     public void setUp() {
149         TestUtilities.setUpExtensionsAndProviders();
150     }
151 
152     public void testAxis() {
153         doit(server+"Port", AXIS, RPC, ADDRESS);
154     }
155     public void testSoap() {
156         doit(server+"Port", SOAP, RPC, ADDRESS);
157     }
158     public void testJava() {
159         doit("JavaPort", JAVA, RPC, ADDRESS);
160     }
161     public void testSoapJms() {
162         doit("SOAPJMSPort", SOAP, RPC, ADDRESS);
163     }
164     public void testAxisJms() {
165         doit("SOAPJMSPort", AXIS, RPC, ADDRESS);
166     }
167     public void testNativeJms() { 
168       doit("NativeJMSPort" ,NJMS, RPC, ADDRESS);
169     } 
170     //public void testAxisDoc       () { doit("SOAPDocPort"   ,AXIS,DOC, ADDRESS ); } FAILS
171     //public void testSoapDoc       () { doit("SOAPDocPort"   ,SOAP,DOC, ADDRESS ); } FAILS
172     //public void testSoapJmsDoc    () { doit("SOAPJMSDocPort",SOAP,DOC, ADDRESS ); } FAILS
173     //public void testAxisJmsDoc    () { doit("SOAPJMSDocPort",AXIS,DOC, ADDRESS ); } FAILS
174     //public void testNativeJmsDoc  () { doit("NativeJMSPort" ,NJMS,DOC, ADDRESS ); } FAILS
175 
176     //public void testNNAxis        () { doit(server+"Port"      ,AXIS,RPC, NULLNAME); } FAILS
177     //public void testNNSoap        () { doit(server+"Port"      ,SOAP,RPC, NULLNAME); } FAILS
178     public void testNNJava() {
179         doit("JavaPort", JAVA, RPC, NULLNAME);
180     }
181     //public void testNNSoapJms     () { doit("SOAPJMSPort"   ,SOAP,RPC, NULLNAME); } FAILS
182     //public void testNNAxisJms     () { doit("SOAPJMSPort"   ,AXIS,RPC, NULLNAME); } FAILS
183     //public void testNNNativeJms   () { doit("NativeJMSPort" ,NJMS,RPC, NULLNAME); } 
184 
185     //public void testAddAxis       () { doit(server+"Port"      ,AXIS,RPC, ADD     ); } FAILS
186     public void testAddSoap() {
187         doit(server+"Port", SOAP, RPC, ADD);
188     }
189     public void testAddJava() {
190         doit("JavaPort", JAVA, RPC, ADD);
191     }
192     public void testAddSoapJms() {
193         doit("SOAPJMSPort", SOAP, RPC, ADD);
194     }
195     //public void testAddAxisJms    () { doit("SOAPJMSPort"   ,AXIS,RPC, ADD     ); } FAILS
196     public void testAddNativeJms() { 
197       doit("NativeJMSPort" , NJMS, RPC, ADD ); 
198     } 
199 
200     //public void testDateAxis      () { doit(server+"Port"      ,AXIS,RPC, DATE    ); } FAILS
201     public void testDateSoap() {
202         doit(server+"Port", SOAP, RPC, DATE);
203     }
204     public void testDateJava() {
205         doit("JavaPort", JAVA, RPC, DATE);
206     }
207     public void testDateSoapJms() {
208         doit("SOAPJMSPort", SOAP, RPC, DATE);
209     }
210     //public void testDateAxisJms   () { doit("SOAPJMSPort"   ,AXIS,RPC, DATE    ); } FAILS
211     public void testDateNativeJms() { 
212       doit("NativeJMSPort" , NJMS, RPC, DATE ); 
213     } 
214 
215     public void testSupCAxis() {
216         doit(server+"Port", AXIS, RPC, SUPC);
217     }
218     public void testSupCSoap() {
219         doit(server+"Port", SOAP, RPC, SUPC);
220     }
221     public void testSupCJava() {
222         doit("JavaPort", JAVA, RPC, SUPC);
223     }
224     public void testSupCSoapJms() {
225         doit("SOAPJMSPort", SOAP, RPC, SUPC);
226     }
227     public void testSupCAxisJms() {
228         doit("SOAPJMSPort", AXIS, RPC, SUPC);
229     }
230     public void testSupCNativeJms() {
231       doit("NativeJMSPort" , NJMS, RPC, SUPC );
232     } 
233     public void testGenCAxis() {
234         doit(server+"Port", AXIS, RPC, GENC);
235     }
236     public void testGenCSoap() {
237         doit(server+"Port", SOAP, RPC, GENC);
238     }
239     public void testGenCJava() {
240         doit("JavaPort", JAVA, RPC, GENC);
241     }
242     public void testGenCSoapJms() {
243         doit("SOAPJMSPort", SOAP, RPC, GENC);
244     }
245     public void testGenCAxisJms() {
246         doit("SOAPJMSPort", AXIS, RPC, GENC);
247     }
248     public void testGenCNativeJms() {
249       doit("NativeJMSPort" , NJMS, RPC, GENC );
250      } 
251 
252     //public void testWhoAxis       () { doit(server+"Port"      ,AXIS,RPC, WHOAMI  ); } FAILS
253     public void testWhoSoap() {
254         doit(server+"Port", SOAP, RPC, WHOAMI);
255     }
256     public void testWhoJava() {
257         doit("JavaPort", JAVA, RPC, WHOAMI);
258     }
259     public void testWhoSoapJms() {
260         doit("SOAPJMSPort", SOAP, RPC, WHOAMI);
261     }
262     //public void testWhoAxisJms    () { doit("SOAPJMSPort"   ,AXIS,RPC, WHOAMI  ); } FAILS
263     public void testWhoNativeJms() {
264       doit("NativeJMSPort" , NJMS, RPC, WHOAMI );
265      } 
266 
267     // The inout test will never work for any form of soap since soap does not
268     // support inout or multiple output parameters.
269     public void testInoJava() {
270         doit("JavaPort", JAVA, RPC, INOUT);
271     }
272 
273     private void doit(String portName, String protocol, String style, String cmd) {
274         if (portName.toUpperCase().indexOf("JMS") != -1
275             && !TestUtilities.areWeTesting("jms"))
276             return;
277 
278         if (protocol.equals(SOAP)) {
279             WSIFDynamicProvider_ApacheSOAP provider = new WSIFDynamicProvider_ApacheSOAP();
280 
281             if (style.equals(DOC))
282                 provider.setPartSerializerName("services.inout.InoutLiteralSerializer");
283 
284             WSIFPluggableProviders.overrideDefaultProvider(
285                 "http://schemas.xmlsoap.org/wsdl/soap/",
286                 provider);
287         }
288         if (protocol.equals(AXIS)) {
289             WSIFDynamicProvider_ApacheAxis provider = new WSIFDynamicProvider_ApacheAxis();
290 
291             WSIFPluggableProviders.overrideDefaultProvider(
292                 "http://schemas.xmlsoap.org/wsdl/soap/",
293                 provider);
294         }
295 
296         try {
297             WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
298             WSIFService service =
299                 factory.getService(
300                     wsdlLocation,
301                     null,
302                     null,
303                     "http://wsifservice.inout/",
304                     "Inout");
305 
306             service.mapType(
307                 new QName("http://wsiftypes.inout/", "arrayofint"),
308                 Class.forName("[I"));
309 
310             Inout stub = (Inout) service.getStub(portName, Inout.class);
311 
312             if (cmd.equals(ADDRESS))
313                 address(stub);
314             else if (cmd.equals(NULLNAME))
315                 nullname(stub);
316             else if (cmd.equals(ADD))
317                 add(stub);
318             else if (cmd.equals(DATE))
319                 date(stub);
320             else if (cmd.equals(SUPC))
321                 supc(service, portName);
322             else if (cmd.equals(GENC)) 
323                 genericc(service, portName);
324             else if (cmd.equals(WHOAMI))
325                 whoami(stub);
326             else if (cmd.equals(INOUT))
327                 inout(stub);
328             else
329                 assertTrue(false);
330         } catch (Exception e) {
331             System.err.println("InoutTest(" + portName + ") caught exception " + e);
332             e.printStackTrace();
333             assertTrue(false);
334         } finally {
335             if (protocol.equals(SOAP) || protocol.equals(AXIS)) {
336                 WSIFPluggableProviders.overrideDefaultProvider(
337                     "http://schemas.xmlsoap.org/wsdl/soap/",
338                     null);
339             }
340         }
341 
342     }
343 
344     private void address(Inout stub) throws Exception {
345         stub.addEntry(name1.toString(), addr1);
346 
347         Mutablestring msName1 = new Mutablestring(name1);
348         Address resp1 = stub.getAddressFromName(msName1);
349         assertTrue(new AddressUtility(resp1).equals(addr1));
350 
351         Mutablestring msName = new Mutablestring("Pur*");
352         resp1 = stub.getAddressFromName(msName);
353         assertTrue(new AddressUtility(resp1).equals(addr1));
354     }
355 
356     private void nullname(Inout stub) throws Exception {
357         stub.addEntry(null, null);
358 
359         Address resp1 = stub.getAddressFromName((String) null);
360         assertTrue(resp1 == null);
361 
362         Address resp2 = stub.getAddressFromName((Mutablestring) null);
363         assertTrue(resp2 == null);
364 
365         // This next bit of code works with soap2.2 but not Axis. I've
366         // commented it out because getAddressFromName((String)null) doesn't
367         // work with either so I can't run this test with soap or axis.
368         //Address nullAddr = new Address(0,"","","",0,new Phone(0,null,null));
369         //Address resp = stub.getAddressFromName (new Mutablestring(null));
370         //assertTrue(resp==null || TestUtilities.AddressEquals(resp,nullAddr));
371     }
372 
373     private void add(Inout stub) throws Exception {
374         int[] nums = new int[] { 1, 2, 3, 4, 5 };
375         int total = stub.addNumbers(nums);
376 
377         String warmFuzzy = new String();
378         int expected = 0;
379         for (int i = 0; i < nums.length; i++) {
380             expected += nums[i];
381             if (i != 0)
382                 warmFuzzy += "+ ";
383             warmFuzzy += nums[i] + " ";
384         }
385         warmFuzzy += "= " + total + " (expected " + expected + ")";
386         System.out.println(warmFuzzy);
387         assertTrue(total == expected);
388     }
389 
390     private void date(Inout stub) throws Exception {
391         Date first = new Date();
392         Thread.sleep(1000);
393         Date remote = stub.getDate();
394         Thread.sleep(1000);
395         Date later = new Date();
396 
397         DateFormat df = DateFormat.getDateTimeInstance();
398         System.out.println(
399             "Remote date is "
400                 + df.format(remote)
401                 + " First date is "
402                 + df.format(first)
403                 + " Later date is "
404                 + df.format(later));
405 
406         assertTrue(first.before(remote) || first.equals(remote));
407         assertTrue(later.after(remote) || later.equals(remote));
408     }
409 
410     private interface SubInout extends Inout {
411         public void dubiousMethod() throws WSIFException;
412     }
413 
414     private void supc(WSIFService service, String portName) throws Exception {
415         SubInout stub = (SubInout) service.getStub(portName, SubInout.class);
416 
417         stub.addEntry(name1, addr1);
418         Mutablestring msName1 = new Mutablestring(name1);
419         Address resp1 = stub.getAddressFromName(msName1);
420         assertTrue(new AddressUtility(addr1).equals(resp1));
421 
422         boolean caught = false;
423         try {
424             stub.dubiousMethod();
425         } catch (WSIFException e) {
426             caught = true;
427         }
428         assertTrue(caught);
429 
430         stub.addEntry(name2, new SubAddress(addr2));
431         Mutablestring msName2 = new Mutablestring(name2);
432         Address resp2 = stub.getAddressFromName(msName2);
433         assertTrue(new AddressUtility(addr2).equals(resp2));
434     }
435 
436     private interface GenericInout {
437         public void addEntry(String wholeName, Object address)
438             throws java.rmi.RemoteException;
439         public Address getAddressFromName(Mutablestring name)
440             throws java.rmi.RemoteException;
441     }
442 
443     private void genericc(WSIFService service, String portName)
444         throws Exception {
445         GenericInout stub =
446             (GenericInout) service.getStub(portName, GenericInout.class);
447 
448         stub.addEntry(name1, addr1);
449         Mutablestring msName1 = new Mutablestring(name1);
450         Address resp1 = stub.getAddressFromName(msName1);
451         assertTrue(new AddressUtility(addr1).equals(resp1));
452     }
453 
454     /**
455      * whoami tests out dynamic proxies by overloading is various
456      * ways.
457      */
458     private void whoami(Inout stub) throws Exception {
459         float f = 1;
460         int i = 1;
461         Address a = new Address();
462         SubAddress suba = new SubAddress();
463         String resp;
464 
465         resp = stub.whoami("Hello");
466         System.out.println("resp was " + resp + " expected String");
467         assertTrue("String".equals(resp));
468 
469         resp = stub.whoami(f);
470         System.out.println("resp was " + resp + " expected float");
471         assertTrue("float".equals(resp));
472 
473         resp = stub.whoami(i);
474         System.out.println("resp was " + resp + " expected int");
475         assertTrue("int".equals(resp));
476 
477         resp = stub.whoami(a);
478         System.out.println("resp was " + resp + " expected Address");
479         assertTrue("Address".equals(resp));
480 
481         resp = stub.whoami(suba);
482         System.out.println("resp was " + resp + " expected Address");
483         assertTrue("Address".equals(resp));
484     }
485 
486     private void inout(Inout stub) throws Exception {
487         stub.addEntry(name1.toString(), addr1);
488 
489         Mutablestring msName1 = new Mutablestring(name1);
490         Address resp1 = new AddressUtility(nulladdr).copy();
491         boolean success = stub.getAddressFromName(msName1, resp1);
492         assertTrue(success && new AddressUtility(resp1).equals(addr1));
493     }
494 
495 }
496 
497 class SubAddress extends Address {
498 
499    public SubAddress() {
500       super();
501    }
502 
503    public SubAddress(Address a) {
504       super(
505          a.getStreetNum(),
506          a.getStreetName(),
507          a.getCity(),
508          a.getState(),
509          a.getZip(),
510          a.getPhoneNumber());
511    }
512 
513 }
514