?? 11.txt
字號:
040
041 public static void main(String args[])
042 {
043 URL url = null;
044
045 try {
046 if (args.length > 0) {
047 url = new URL(args[0]);
048 } else {
049 url = new URL(DEFAULT_URL);
050 }
051 } catch (Exception e) {
052 e.printStackTrace();
053 }
054
055 EchoTestClient eTest = new EchoTestClient();
056 eTest.doWork(url);
057 }
058
059 private static boolean equals(Object obj1, Object obj2) {
060 if ((obj1==null) || (obj2==null)) return (obj1==obj2);
061 if (obj1.equals(obj2)) return true;
062 if (obj1 instanceof Date && obj2 instanceof Date)
063 if (Math.abs(((Date)obj1).getTime()-((Date)obj2).getTime())<1000)
064 return true;
065 if (!obj2.getClass().isArray()) return false;
066 if (!obj1.getClass().isArray()) return false;
067 if (Array.getLength(obj1) != Array.getLength(obj2)) return false;
068 for (int i=0; i<Array.getLength(obj1); i++)
069 if (!equals(Array.get(obj1,i),Array.get(obj2,i))) return false;
070 return true;
071 }
072
073 public void doWork(URL url)
074 {
075 IntDeserializer intDser = new IntDeserializer();
076 FloatDeserializer floatDser = new FloatDeserializer();
077 StringDeserializer stringDser = new StringDeserializer();
078 ArraySerializer arraySer = new ArraySerializer();
079 DataSerializer dataSer = new DataSerializer();
080 Base64Serializer base64Ser = new Base64Serializer();
081 DateSerializer dateSer = new DateSerializer();
082 DecimalDeserializer decimalSer = new DecimalDeserializer();
083 BooleanDeserializer booleanSer = new BooleanDeserializer();
084 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
085 new QName(OBJECT_URI, "SOAPStruct"), Data.class, dataSer, dataSer);
086
087 Parameter p = new Parameter("inputString", String.class, "Hi there!", null);
088 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
089 new QName("", "return"), null, null, stringDser);
090 doCall(url, "echoString", p);
091
092 p = new Parameter("inputStringArray", String[].class, new String[]{
093 "First",
094 "Second",
095 "Fifth (just kidding :))",
096 "Fourth",
097 "Last"}, null);
098 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
099 new QName("", "return"), null, null, arraySer);
100 doCall(url, "echoStringArray", p);
101
102 Integer i = new Integer(5);
103 p = new Parameter("inputInteger", Integer.class, i, null);
104 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
105 new QName("", "return"), null, null, intDser);
106 doCall(url, "echoInteger", p);
107
108 p = new Parameter("inputIntegerArray", Integer[].class, new Integer[]{
109 new Integer(5),
110 new Integer(4),
111 new Integer(3),
112 new Integer(2),
113 new Integer(1)}, null);
114 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
115 new QName("", "return"), null, null, arraySer);
116 doCall(url, "echoIntegerArray", p);
117
118 p = new Parameter("inputFloat", Float.class, new Float(55.5), null);
119 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
120 new QName("", "return"), null, null, floatDser);
121 doCall(url, "echoFloat", p);
122
123 p = new Parameter("inputFloatArray", Float[].class, new Float[]{
124 new Float(5.5),
125 new Float(4.4),
126 new Float(3.3),
127 new Float(2.2),
128 new Float(1.1)}, null);
129 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
130 new QName("", "return"), null, null, arraySer);
131 doCall(url, "echoFloatArray", p);
132
133 p = new Parameter("inputStruct", Data.class,
134 new Data(5, "Hola, baby", (float)10.0), null);
135 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
136 new QName("", "return"), null, null, dataSer);
137 doCall(url, "echoStruct", p);
138
139 p = new Parameter("inputStructArray", Data[].class, new Data[]{
140 new Data(5, "cinqo", new Float("5.55555").floatValue()),
141 new Data(4, "quattro", (float)4.4444),
142 new Data(3, "tres", (float)3.333),
143 new Data(2, "duet", (float)2.22),
144 new Data(1, "un", (float)1.1)}, null);
145 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
146 new QName("", "return"), null, null, arraySer);
147 doCall(url, "echoStructArray", p);
148
149 doCall(url, "echoVoid", null);
150
151 p = new Parameter("inputBase64", byte[].class, "ciao".getBytes(), null);
152 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
153 new QName("", "return"), null, null, base64Ser);
154 doCall(url, "echoBase64", p);
155
156 p = new Parameter("inputDate", Date.class, new Date(), null);
157 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
158 new QName("", "return"), null, null, dateSer);
159 doCall(url, "echoDate", p);
160
161 p = new Parameter("inputDecimal", BigDecimal.class,
162 new BigDecimal("3.14159"), null);
163 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
164 new QName("", "return"), null, null, decimalSer);
165 doCall(url, "echoDecimal", p);
166
167 p = new Parameter("inputBoolean", Boolean.class, new Boolean(true), null);
168 smr.mapTypes(Constants.NS_URI_SOAP_ENC,
169 new QName("", "return"), null, null, booleanSer);
170 doCall(url, "echoBoolean", p);
171
172 }
173
174 public void doCall(URL url, String methodName, Parameter param)
175 {
176 try {
177 Call call = new Call();
178 Vector params = new Vector();
179 if (param != null)
180 params.addElement(param);
181 call.setSOAPMappingRegistry(smr);
182 call.setTargetObjectURI(ACTION_URI);
183 call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
184 call.setMethodName(methodName);
185 call.setParams(params);
186 if (header != null)
187 call.setHeader(header);
188
189 String soapAction = ACTION_URI;
190 if (false) {
191 soapAction = soapAction + methodName;
192 }
193
194 Response resp = call.invoke(url, soapAction);
195
196 // check response
197 if (resp.generatedFault()) {
198 Fault fault = resp.getFault ();
199 System.out.println(methodName + "\t FAIL: " + fault.getFaultString());
200 } else {
201 Parameter ret = resp.getReturnValue();
202 Object output = (ret==null) ? null : ret.getValue();
203 Object input = (param==null) ? null : param.getValue();
204
205 if (equals(input,output)) {
206 System.out.println(methodName + "\t OK");
207 } else {
208 System.out.println(methodName + "\t FAIL: " + output);
209 }
210 }
211
212 } catch (Exception e) {
213 System.out.println(methodName + "\t FAIL: " + e);
214 }
215 }
216 }
例程11-6
01 package samples.interop;
02
03 class Data
04 {
05 Integer myInt;
06 String myString;
07 Float myFloat;
08
09 public Data()
10 {
11 }
12
13 public Data(int i, String s, float f)
14 {
15 myInt = new Integer(i);
16 myString = s;
17 myFloat = new Float(f);
18 }
19
20 public String toString()
21 {
22 return "Data[MyInt=" + myInt + ", MyString='" +
23 myString + "', myFloat=" + myFloat + "]";
24 }
25
26 /**
27 * Equality comparison.
28 */
29 public boolean equals(Object object) {
30 if (!(object instanceof Data)) return false;
31
32 Data that= (Data) object;
33
34 if (!this.myInt.equals(that.myInt)) return false;
35 if (!this.myFloat.equals(that.myFloat)) return false;
36
37 if (this.myString == null) {
38 if (that.myString != null) return false;
39 } else {
40 if (!this.myString.equals(that.myString)) return false;
41 }
42
43 return true;
44 };
45 }
例程11-7
001 package samples.interop;
002
003 import Java.util.Vector;
004 import org.apache.soap.*;
005 import org.apache.soap.encoding.SOAPMappingRegistry;
006 import org.apache.soap.encoding.soapenc.*;
007 import org.apache.soap.rpc.*;
008 import org.apache.soap.messaging.*;
009 import Java.net.URL;
010 import org.apache.soap.util.xml.*;
011 import Java.io.*;
012 import org.w3c.dom.*;
013 import org.apache.soap.util.*;
014 import Java.lang.reflect.*;
015
016 public class DataSerializer implements Serializer, Deserializer
017 {
018 public void marshall(String inScopeEncStyle, Class JavaType, Object src,
019 Object context, Writer sink, NSStack nsStack,
020 XMLJavaMappingRegistry xjmr, SOAPContext ctx)
021 throws IllegalArgumentException, IOException
022 {
023 if(!JavaType.equals(Data.class))
024 {
025 throw new IllegalArgumentException("Can only serialize Data instances");
026 }
027
028 Data data = (Data)src;
029
030 nsStack.pushScope();
031 if(src!=null)
032 {
033 SoapEncUtils.generateStructureHeader(inScopeEncStyle,
034 JavaType,
035 context,
036 sink,
037 nsStack,xjmr);
038
039 sink.write(StringUtils.lineSeparator);
040
041 xjmr.marshall(inScopeEncStyle, Integer.class, data.myInt, "varInt",
042 sink, nsStack, ctx);
043 sink.write(StringUtils.lineSeparator);
044 xjmr.marshall(inScopeEncStyle, Float.class, data.myFloat, "varFloat",
045 sink, nsStack, ctx);
046 sink.write(StringUtils.lineSeparator);
047 xjmr.marshall(inScopeEncStyle, String.class, data.myString, "varString",
048 sink, nsStack, ctx);
049 sink.write(StringUtils.lineSeparator);
050
051 sink.write("</" + context + '>');
052 }
053 else
054 {
055 SoapEncUtils.generateNullStructure(inScopeEncStyle,
056 JavaType,
057 context,
058 sink,
059 nsStack,xjmr);
060 }
061 nsStack.popScope();
062 }
063
064 public Bean unmarshall(String inScopeEncStyle, QName elementType, Node src,
065 XMLJavaMappingRegistry xjmr, SOAPContext ctx)
066 throws IllegalArgumentException
067 {
068 Element root = (Element)src;
069 String name = root.getTagName();
070
071 if (SoapEncUtils.isNull(root))
072 {
073 return new Bean(Data.class, null);
074 }
075
076 Data ret = new Data();
077 NodeList list = root.getElementsByTagName("varInt");
078 if (list == null || list.getLength() == 0) {
079 throw new IllegalArgumentException(
080 "No 'varInt' Element (deserializing Data struct)");
081 }
082 Element el = (Element)list.item(0);
083 ret.myInt = new Integer(DOMUtils.getChildCharacterData(el));
084
085 list = root.getElementsByTagName("varFloat");
086 if (list == null || list.getLength() == 0) {
087 throw new IllegalArgumentException(
088 "No 'varFloat' Element (deserializing Data struct)");
089 }
090 el = (Element)list.item(0);
091 ret.myFloat = new Float(DOMUtils.getChildCharacterData(el));
092
093 list = root.getElementsByTagName("varString");
094 if (list == null || list.getLength() == 0) {
095 throw new IllegalArgumentException(
096 "No 'varString' Element (deserializing Data struct)");
097 }
098 el = (Element)list.item(0);
099 ret.myString = ((Text)el.getFirstChild()).getData();
100
101 return new Bean(Data.class, ret);
102 }
103 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -