File: TestArrayListConversions.java

package info (click to toggle)
axis 1.4-29
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 52,100 kB
  • sloc: java: 129,124; xml: 10,602; jsp: 983; sh: 84; cs: 36; makefile: 18
file content (170 lines) | stat: -rw-r--r-- 5,777 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package test.encoding;

import junit.framework.TestCase;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.configuration.SimpleProvider;
import org.apache.axis.description.ServiceDesc;
import org.apache.axis.handlers.soap.SOAPService;
import org.apache.axis.providers.java.RPCProvider;
import org.apache.axis.server.AxisServer;
import org.apache.axis.transport.local.LocalTransport;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class TestArrayListConversions extends TestCase {
    private static final String SERVICE_NAME = "TestArrayConversions";

    private AxisServer server;
    private LocalTransport transport;

    public TestArrayListConversions() {
        super("service");
    }

    public TestArrayListConversions(String name) {
        super(name);
    }

    private static boolean equals(List list, Object obj) {
        if ((list == null) || (obj == null))
            return false;

        if (!obj.getClass().isArray()) return false;

        Object[] array = (Object[]) obj;
        Iterator iter = list.iterator();

        for (int i = 0; i < array.length; i++) {
            if (!(array[i].equals(iter.next()))) {
                return false;
            }
        }

        return true;
    }

    protected void setUp() throws Exception {
        try {
            SimpleProvider provider = new SimpleProvider();
            server = new AxisServer(provider);
            transport = new LocalTransport(server);

            SOAPService service = new SOAPService(new RPCProvider());
            service.setEngine(server);

            service.setOption("className", "test.encoding.TestArrayListConversions");
            service.setOption("allowedMethods", "*");

            ServiceDesc desc = service.getInitializedServiceDesc(null);
            desc.setDefaultNamespace(SERVICE_NAME);

            provider.deployService(SERVICE_NAME, service);
        } catch (Exception exp) {
            exp.printStackTrace();
        }

    }

    public void testVectorConversion() throws Exception {
        Call call = new Call(new Service());
        call.setTransport(transport);

        Vector v = new Vector();
        v.addElement("Hi there!");
        v.addElement("This'll be a SOAP Array and then a LinkedList!");
        call.setOperationName(new QName(SERVICE_NAME, "echoLinkedList"));
        Object ret = call.invoke(new Object[]{v});
        if (!equals(v, ret)) assertEquals("Echo LinkedList mangled the result.  Result is underneath.\n" + ret, v, ret);
    }

    public void testLinkedListConversion() throws Exception {
        Call call = new Call(new Service());
        call.setTransport(transport);

        LinkedList l = new LinkedList();
        l.add("Linked list item #1");
        l.add("Second linked list item");
        l.add("This will be a SOAP Array then a Vector!");

        call.setOperationName(new QName(SERVICE_NAME, "echoVector"));
        Object ret = call.invoke(new Object[]{l});
        if (!equals(l, ret)) assertEquals("Echo Vector mangled the result.  Result is underneath.\n" + ret, l, ret);
    }

    public void testArrayConversion() throws Exception {
        Call call = new Call(new Service());
        call.setTransport(transport);

        Vector v = new Vector();
        v.addElement("Hi there!");
        v.addElement("This'll be a SOAP Array");

        call.setOperationName(new QName(SERVICE_NAME, "echoArray"));
        Object ret = call.invoke(new Object[]{v});
        if (!equals(v, ret)) assertEquals("Echo Array mangled the result.  Result is underneath\n" + ret, v, ret);
    }

    /**
     * Test the setReturnClass() API on Call by asking the runtime to
     * give us back a Vector instead of an array.  Confirm we get a Vector
     * back, and that it matches the data we send.
     */
    public void testReturnAsVector() throws Exception {
        Call call = new Call(new Service());
        call.setTransport(transport);

        LinkedList l = new LinkedList();
        l.add("Linked list item #1");
        l.add("Second linked list item");
        l.add("This will be a SOAP Array then a Vector!");

        call.setOperationName(new QName(SERVICE_NAME, "echoArray"));
        call.addParameter("arg0", null, LinkedList.class, ParameterMode.IN);
        call.setReturnClass(Vector.class);
        Object ret = call.invoke(new Object[]{l});
        assertEquals("Return wasn't a Vector!", Vector.class, ret.getClass());
        Vector v = (Vector)ret;
        assertEquals("Sizes were different", l.size(), v.size());
        for (int i = 0; i < l.size(); i++) {
            String s = (String)l.get(i);
            assertEquals("Value " + i + " didn't match", s, v.get(i));
        }
    }

    public static void main(String[] args) {
        TestArrayListConversions tester = new TestArrayListConversions("TestArrayListConversions");
        try {
            tester.setUp();
            tester.testArrayConversion();
            tester.testLinkedListConversion();
            tester.testVectorConversion();
            tester.testReturnAsVector();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /****************************************************************
     *
     * Service methods - this class is also deployed as an Axis RPC
     * service for convenience.  These guys just echo various things.
     *
     */
    public LinkedList echoLinkedList(LinkedList l) {
        return l;
    }

    public Vector echoVector(Vector v) {
        return v;
    }

    public Object[] echoArray(Object[] array) {
        return array;
    }
}