View Javadoc

    1   package org.codehaus.xfire.client;
    2
    3   import java.lang.reflect.Proxy;
    4   import java.net.MalformedURLException;
    5
    6   import org.codehaus.xfire.XFire;
    7   import org.codehaus.xfire.service.Service;
    8   import org.codehaus.xfire.transport.Transport;
    9
    10  /***
    11   * Factory for creating XFire SOAP client stubs.  The returned stub will call the remote object for all methods.
    12   * <pre>
    13   * String url = "http://localhost:8080/services/Echo");
    14   * Echo echo = (Echo) factory.create(HelloHome.class, url);
    15   * </pre>
    16   * After creation, the stub can be like a regular Java class.  Because it makes remote calls, it can throw more
    17   * exceptions than a Java class. In particular, it may throw protocol exceptions, and <code>XFireFaults</code>
    18   *
    19   * @author <a href="mailto:poutsma@mac.com">Arjen Poutsma</a>
    20   * @see org.codehaus.xfire.fault.XFireFault
    21   */
    22  public class XFireProxyFactory
    23  {
    24      private XFire xfire;
    25
    26      public XFireProxyFactory()
    27      {
    28      }
    29
    30      public XFireProxyFactory(XFire xfire)
    31      {
    32          this.xfire = xfire;
    33      }
    34
    35      /***
    36       * Creates a new proxy with the specified URL. The returned object is a proxy with the interface specified by the
    37       * given service interface.
    38       * <pre>
    39       * String url = "http://localhost:8080/services/Echo");
    40       * Echo echo = (Echo) factory.create(myService, url);
    41       * </pre>
    42       *
    43       * @param service the service to create a client for.
    44       * @param url              the URL where the client object is located.
    45       * @return a proxy to the object with the specified interface.
    46       */
    47      public Object create(Service service, String url)
    48              throws MalformedURLException
    49      {
    50          Transport transport = xfire.getTransportManager().getTransportForUri(url);
    51
    52          return create(transport, service, url);
    53      }
    54
    55      /***
    56       * Creates a new proxy with the specified URL. The returned object is a proxy with the interface specified by the
    57       * given service interface.
    58       * <pre>
    59       * String url = "http://localhost:8080/services/Echo");
    60       * Echo echo = (Echo) factory.create(transport, myService, url);
    61       * </pre>
    62       *
    63       * @param transport        The transport to use.
    64       * @param serviceInterface the service to create a client for.
    65       * @param url              the URL where the client object is located.
    66       * @return a proxy to the object with the specified interface.
    67       */
    68      public Object create(Transport transport, Service service, String url)
    69              throws MalformedURLException
    70      {
    71          Client client = new Client(transport, service, url);
    72          client.setXFire(xfire);
    73
    74          XFireProxy handler = new XFireProxy(client);
    75          Class serviceClass = service.getServiceInfo().getServiceClass();
    76
    77          return Proxy.newProxyInstance(serviceClass.getClassLoader(),
    78                                        new Class[]{serviceClass},
    79                                        handler);
    80      }
    81  }