⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.txt

📁 《JAVA WEB服务应用开发详解》代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -