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

📄 servicemanagerclient.java

📁 JavaWeb服务应用开发详解的配套源码,欢迎下载
💻 JAVA
字号:
// org.apache.soap.server.ServiceManagerClient.java
package org.apache.soap.server;

import java.net.URL;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.transport.http.SOAPHTTPConnection;
import org.apache.soap.rpc.*;

/**
 * This is a client to talk to an Apache SOAP ServiceManager to manage services
 * deployed on the server.
 *
 * @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
 */
public class ServiceManagerClient {
  URL routerURL;
  Vector params = new Vector ();
  Call call = new Call ();
  String userName;
  String password;

  public ServiceManagerClient (URL routerURL) {
    Serializer bs = new org.apache.soap.encoding.soapenc.BeanSerializer ();

    this.routerURL = routerURL;
    SOAPMappingRegistry smr = call.getSOAPMappingRegistry ();

    // register serializer/deserializer for DeploymentDescriptor.class
    // and TypeMapping.class
    smr.mapTypes (Constants.NS_URI_SOAP_ENC,
                  new QName (Constants.NS_URI_XML_SOAP,
                             "DeploymentDescriptor"),
                  DeploymentDescriptor.class, bs, (Deserializer) bs);
    bs = new TypeMappingSerializer ();
    smr.mapTypes (Constants.NS_URI_SOAP_ENC,
                  new QName (Constants.NS_URI_XML_SOAP, "TypeMapping"),
                  TypeMapping.class, bs, (Deserializer) bs);
  }

  public void setUserName (String userName) {
    this.userName = userName;
  }

  public void setPassword (String password) {
    this.password = password;
  }

//invoke the remote rpc method
  private Response invokeMethod (String methodName, Parameter param) 
       throws SOAPException {
    call.setTargetObjectURI (ServerConstants.SERVICE_MANAGER_SERVICE_NAME);
    call.setMethodName (methodName);
    call.setEncodingStyleURI (Constants.NS_URI_SOAP_ENC);
    if (userName != null) {
      SOAPHTTPConnection hc = new SOAPHTTPConnection ();
      hc.setUserName (userName);
      hc.setPassword (password);
      call.setSOAPTransport (hc);
    }
    if (param != null) {
      params.removeAllElements ();
      params.addElement (param);
      call.setParams (params);
    } else {
      call.setParams (null);
    }
    Response resp = call.invoke (routerURL, "");
    if (resp.generatedFault ()) {
      Fault fault = resp.getFault ();
      System.out.println ("Ouch, the call failed: ");
      System.out.println ("  Fault Code   = " + fault.getFaultCode ());  
      System.out.println ("  Fault String = " + fault.getFaultString ());
    }  
    return resp;
  }

//deploy a new service descripted by the specified DD
  public void deploy (DeploymentDescriptor dd) throws SOAPException {
    Parameter p1 = new Parameter ("descriptor", DeploymentDescriptor.class,
                                  dd, null);
    invokeMethod ("deploy", p1);
  }

//undeploy specified service
  public void undeploy (String serviceName) throws SOAPException {
    Parameter p1 = new Parameter ("name", String.class, serviceName, null);
    invokeMethod ("undeploy", p1);
  }
  
//list the deployed services
  public String[] list () throws SOAPException {
    Response resp = invokeMethod ("list", null);
    if (!resp.generatedFault ()) {
      Parameter result = resp.getReturnValue ();
      return (String[]) result.getValue ();
    } else {
      return null;
    }
  }

//query specified service 
  public DeploymentDescriptor query (String serviceName) throws SOAPException {
    Parameter p1 = new Parameter ("name", String.class, serviceName, null);
    Response resp = invokeMethod ("query", p1);
    if (!resp.generatedFault ()) {
      Parameter result = resp.getReturnValue ();
      return (DeploymentDescriptor) result.getValue ();
    } else {
      return null;
    }
  }

//show usage
  private static void badUsage () {
    System.err.println ("Usage: java " +
                        ServiceManagerClient.class.getName () +
                        " [-auth username:password] url operation arguments");
    System.err.println ("where");
    System.err.println ("\tusername and password is the HTTP Basic" +
			" authentication info");
    System.err.println ("\turl is the Apache SOAP router's URL whose" +
                        " services are managed");
    System.err.println ("\toperation and arguments are:");
    System.err.println ("\t\tdeploy deployment-descriptor-file.xml");
    System.err.println ("\t\tlist");
    System.err.println ("\t\tquery service-name");
    System.err.println ("\t\tundeploy service-name");
    System.exit (1);
  }

  /**
   * Command-line app for managing services on an Apache SOAP server.
   */
  public static void main (String[] args) throws Exception {
    URL routerURL;
    String op;
    String userName = null;
    String password = null;

    if (args.length < 2) {
      badUsage ();
    }

    int base = 0;
    if (args[0].equals ("-auth")) {
      if (args.length < 4) { // -auth user:pass + url + op is minimal
	badUsage ();
      }
      StringTokenizer st = new StringTokenizer (args[1], ":");
      if (st.countTokens () != 2) {
	badUsage ();
      }
      userName = st.nextToken ();
      password = st.nextToken ();
      base = 2;
    }

    ServiceManagerClient smc = 
      new ServiceManagerClient (new URL (args[base]));
    if (base == 2) {
      smc.setUserName (userName);
      smc.setPassword (password);
    }

    op = args[base+1];
    if (op.equals ("deploy")) {
//deploy a servie
      if (args.length != base+3) {
        badUsage ();
      }
//read and parse the DD
      FileReader fr = new FileReader (args[base+2]);
      DocumentBuilder xdb = XMLParserUtils.getXMLDocBuilder();
      Document doc = xdb.parse(new InputSource(fr));
//deploy it
      smc.deploy (DeploymentDescriptor.fromXML (doc.getDocumentElement ()));
    } else if (op.equals ("undeploy")) {
//undeploy it
      if (args.length != base+3) {
        badUsage ();
      }
      smc.undeploy (args[base+2]);
    } else if (op.equals ("list")) {
//list the services
      String[] sms = smc.list ();
      if (sms != null) {
        System.out.println ("Deployed Services:");
        for (int i = 0; i < sms.length; i++) {
          System.out.println ("\t" + sms[i]);
        }
      }
    } else if (op.equals ("query")) {
//query the DD of a service
      if (args.length != base+3) {
        badUsage ();
      }
      DeploymentDescriptor dd = smc.query (args[base+2]);
      if (dd != null) {
        dd.toXML (new OutputStreamWriter (System.out));
      }
    } else {
      badUsage ();
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -