View Javadoc

1   /*
2    * Copyright (c) 2005, The K-Wf Grid Consortium
3    * Fraunhofer Institute for Computer Architecture and Software Technology
4    * See http://www.kwfgrid.eu and http://www.first.fraunhofer.de for more details.
5    */
6   
7   package net.kwfgrid.gwui.servicestubs;
8   
9   import org.apache.log4j.Logger;
10  import org.apache.log4j.Level;
11  
12  import java.rmi.RemoteException;
13  
14  import com.wingfoot.soap.*;
15  import com.wingfoot.soap.transport.*;
16  import com.wingfoot.soap.encoding.*;
17  
18  abstract class WSClient {
19      protected static Logger logger = Logger.getLogger(WSClient.class);
20  
21      protected String _serviceURL;
22  
23      protected TypeMappingRegistry _dummy;
24  
25      protected WSClient(String url) {
26          _serviceURL = url;
27          _dummy = new TypeMappingRegistry();
28      }
29      public String getURL() {
30          return _serviceURL;
31      }
32      public void setURL(String url) {
33          _serviceURL = url;
34      }
35  
36      /***
37       * sets transport-protocol, invokes soap-service and tests result for common problems;
38       * @param methodName name of method to invoke
39       * @param params The parameters as name/value pairs. The names must be of type java.lang.String.
40       */
41      protected Envelope makeRPC(String methodName, Object[][] params) throws RemoteException {
42          
43          Envelope requestEnvelope = new Envelope();
44          Call call = new Call(requestEnvelope);
45          Envelope responseEnvelope = null;
46  
47          try {
48              call.setMethodName(methodName);
49              for (int i=0; i<params.length; i++)
50                  call.addParameter((String)params[i][0], params[i][1]);
51  
52              J2SEHTTPTransport transport = new J2SEHTTPTransport(_serviceURL, null);
53              transport.getResponse(true); //don't use false if u want to see a potential fault
54  
55              if (logger.isDebugEnabled()) {
56                  logger.debug("Invoking SOAP call to service "+_serviceURL+":\n"+
57                          new String(requestEnvelope.serialize(_dummy, methodName, _serviceURL)));
58              } else {
59                  logger.info("Invoking SOAP call to service "+_serviceURL+".");
60              }
61  
62              responseEnvelope = call.invoke(transport);
63  
64              if (logger.isDebugEnabled()) {
65                  logger.debug("Got SOAP response from service "+_serviceURL+":\n"+
66                          new String(responseEnvelope.serialize(_dummy, methodName, _serviceURL)));
67              } else {
68                  logger.info("Got SOAP response from service "+_serviceURL+".");
69              }
70          } catch (Exception e) {
71              logger.error("exception:",e);
72              throw new RemoteException(e.getMessage(), e);
73          }
74          if( responseEnvelope != null ) {
75              if( responseEnvelope.isFaultGenerated() ) { //Exception on soap-service (remote) site
76                  Fault fault = responseEnvelope.getFault();
77                  logger.error("exception on service-site: \n\t\t\t\t FaultCode   == " + fault.getFaultCode() + "\n" +
78                          "\t\t\t\t FaultString == " + fault.getFaultString() );
79                  throw new RemoteException("exception on SOAP-server; FaultString: "+fault.getFaultString()+" FaultCode: "+fault.getFaultCode());
80              }
81          }
82  
83          return responseEnvelope;
84      }
85  }
86