FileDocCategorySizeDatePackage
AdminClient.javaAPI DocApache Axis 1.417274Sat Apr 22 18:57:26 BST 2006org.apache.axis.client

AdminClient

public class AdminClient extends Object
An admin client object that can be used both from the command line and programmatically.
author
Rob Jellinghaus (robj@unrealities.com)
author
Doug Davis (dug@us.ibm.com)
author
Simeon Simeonov (simeons@macromedia.com)

Fields Summary
protected static Log
log
private static ThreadLocal
defaultConfiguration
protected Call
call
the object that represents our call
protected static final String
ROOT_UNDEPLOY
root element of the undeploy request
Constructors Summary
public AdminClient()
Construct an admin client w/o a logger. If the client cannot create a call object, then it does not throw an exception. Instead it prints a message to {@link System.err}. This is for 'historical reasons'

        try {
            initAdminClient();
        } catch (ServiceException e) {
            System.err.println(Messages.getMessage("couldntCall00") + ": " + e);
            call = null;
        }
    
public AdminClient(boolean ignored)
this is a somwhat contrived variant constructor, one that throws an exception if things go wrong.

param
ignored

        initAdminClient();
    
Methods Summary
public CallgetCall()
External access to our Call
return
the Call object this instance uses

        return call;
    
private static java.lang.StringgetUsageInfo()

        String lSep = System.getProperty("line.separator");
        StringBuffer msg = new StringBuffer();
        // 26 is the # of lines in resources.properties
        msg.append(Messages.getMessage("acUsage00")).append(lSep);
        msg.append(Messages.getMessage("acUsage01")).append(lSep);
        msg.append(Messages.getMessage("acUsage02")).append(lSep);
        msg.append(Messages.getMessage("acUsage03")).append(lSep);
        msg.append(Messages.getMessage("acUsage04")).append(lSep);
        msg.append(Messages.getMessage("acUsage05")).append(lSep);
        msg.append(Messages.getMessage("acUsage06")).append(lSep);
        msg.append(Messages.getMessage("acUsage07")).append(lSep);
        msg.append(Messages.getMessage("acUsage08")).append(lSep);
        msg.append(Messages.getMessage("acUsage09")).append(lSep);
        msg.append(Messages.getMessage("acUsage10")).append(lSep);
        msg.append(Messages.getMessage("acUsage11")).append(lSep);
        msg.append(Messages.getMessage("acUsage12")).append(lSep);
        msg.append(Messages.getMessage("acUsage13")).append(lSep);
        msg.append(Messages.getMessage("acUsage14")).append(lSep);
        msg.append(Messages.getMessage("acUsage15")).append(lSep);
        msg.append(Messages.getMessage("acUsage16")).append(lSep);
        msg.append(Messages.getMessage("acUsage17")).append(lSep);
        msg.append(Messages.getMessage("acUsage18")).append(lSep);
        msg.append(Messages.getMessage("acUsage19")).append(lSep);
        msg.append(Messages.getMessage("acUsage20")).append(lSep);
        msg.append(Messages.getMessage("acUsage21")).append(lSep);
        msg.append(Messages.getMessage("acUsage22")).append(lSep);
        msg.append(Messages.getMessage("acUsage23")).append(lSep);
        msg.append(Messages.getMessage("acUsage24")).append(lSep);
        msg.append(Messages.getMessage("acUsage25")).append(lSep);
        msg.append(Messages.getMessage("acUsage26")).append(lSep);
        return msg.toString();
    
private voidinitAdminClient()
core initialisation routine

throws
ServiceException

        // Initialize our Service - allow the user to override the
        // default configuration with a thread-local version (see
        // setDefaultConfiguration() above)
        EngineConfiguration config =
                (EngineConfiguration) defaultConfiguration.get();
        Service service;
        if (config != null) {
            service = new Service(config);
        } else {
            service = new Service();
        }
        call = (Call) service.createCall();
    
public java.lang.Stringlist(org.apache.axis.utils.Options opts)
process the options then run a list call

param
opts
return
throws
Exception

        processOpts( opts );
        return list();
    
public java.lang.Stringlist()
send a list command

return
the response from the call
throws
Exception

        log.debug( Messages.getMessage("doList00") );
        String               str   = "<m:list xmlns:m=\"" + WSDDConstants.URI_WSDD + "\"/>" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    
public static voidmain(java.lang.String[] args)
Creates in instance of AdminClient and invokes process(args).

Diagnostic output goes to log.info.

param
args Commands to process

        try {
            AdminClient admin = new AdminClient();

            String result = admin.process(args);
            if (result != null) {
                System.out.println( StringUtils.unescapeNumericChar(result) );
            } else {
                System.exit(1);
            }
    } catch (AxisFault ae) {
            System.err.println(Messages.getMessage("exception00") + " " + ae.dumpToString());
            System.exit(1);
        } catch (Exception e) {
            System.err.println(Messages.getMessage("exception00") + " " + e.getMessage());
            System.exit(1);
        }
    
public java.lang.Stringprocess(java.lang.String[] args)

Processes a set of administration commands.

The following commands are available:

  • -lurl sets the AxisServlet URL
  • -hhostName sets the AxisServlet host
  • -pportNumber sets the AxisServlet port
  • -sservletPath sets the path to the AxisServlet
  • -ffileName specifies that a simple file protocol should be used
  • -uusername sets the username
  • -wpassword sets the password
  • -d sets the debug flag (for instance, -ddd would set it to 3)
  • -tname sets the transport chain touse
  • list will list the currently deployed services
  • quit will quit (???)
  • passwd value changes the admin password
  • xmlConfigFile deploys or undeploys Axis components and web services

If -l or -h -p -s are not set, the AdminClient will invoke http://localhost:8080/axis/servlet/AxisServlet.

param
args Commands to process
return
XML result or null in case of failure. In the case of multiple commands, the XML results will be concatenated, separated by \n
exception
Exception Could be an IO exception, an AxisFault or something else

        StringBuffer sb = new StringBuffer();

        Options opts = new Options( args );
        opts.setDefaultURL("http://localhost:8080/axis/services/AdminService");

        if (opts.isFlagSet('d") > 0) {
            // Set logger properties... !!!
        }

        args = opts.getRemainingArgs();

        if ( args == null  || opts.isFlagSet('?") > 0) {
            System.out.println(Messages.getMessage("usage00","AdminClient [Options] [list | <deployment-descriptor-files>]"));
            System.out.println("");
            System.out.println(getUsageInfo());
            return null;
        }

        for ( int i = 0 ; i < args.length ; i++ ) {
            InputStream input = null;

            if ( args[i].equals("list") )
              sb.append( list(opts) );
            else if (args[i].equals("quit"))
              sb.append( quit(opts) );
            else if (args[i].equals("passwd")) {
                System.out.println(Messages.getMessage("changePwd00"));
                if (args[i + 1] == null) {
                    System.err.println(Messages.getMessage("needPwd00"));
                    return null;
                }
                String str = "<m:passwd xmlns:m=\"http://xml.apache.org/axis/wsdd/\">";
                str += args[i + 1];
                str += "</m:passwd>";
                input = new ByteArrayInputStream(str.getBytes());
                i++;
                sb.append( process(opts, input) );
            }
            else {
                if(args[i].indexOf(java.io.File.pathSeparatorChar)==-1){
                    System.out.println( Messages.getMessage("processFile00", args[i]) );
                    sb.append( process(opts, args[i] ) );
                } else {
                    java.util.StringTokenizer tokenizer = null ;
                    tokenizer = new java.util.StringTokenizer(args[i],
                                                 java.io.File.pathSeparator);
                    while(tokenizer.hasMoreTokens()) {
                        String file = tokenizer.nextToken();
                        System.out.println( Messages.getMessage("processFile00", file) );
                        sb.append( process(opts, file) );
                        if(tokenizer.hasMoreTokens())
                            sb.append("\n");
                    }
                }
            }
        }

        return sb.toString();
    
public java.lang.Stringprocess(java.io.InputStream input)

        return process(null, input );
    
public java.lang.Stringprocess(java.net.URL xmlURL)

        return process(null, xmlURL.openStream() );
    
public java.lang.Stringprocess(java.lang.String xmlFile)
process an XML file containing a pre-prepared admin message

param
xmlFile file to load
return
throws
Exception

        FileInputStream in = new FileInputStream(xmlFile);
        String result =  process(null, in );
        return result ;
    
public java.lang.Stringprocess(org.apache.axis.utils.Options opts, java.lang.String xmlFile)

        processOpts( opts );
        return process( xmlFile );
    
public java.lang.Stringprocess(org.apache.axis.utils.Options opts, java.io.InputStream input)
submit the input stream's contents to the endpoint, return the results as a string. The input stream is always closed after the call, whether the request worked or not

param
opts options -can be null
param
input -input stream for request
return
throws
Exception if the call was null
throws
AxisFault if the invocation returned an empty response

        try {
            if (call == null) {
                //validate that the call is not null
                throw new Exception(Messages.getMessage("nullCall00"));
            }

            if ( opts != null ) {
                //process options if supplied
                processOpts( opts );
            }

            call.setUseSOAPAction( true);
            call.setSOAPActionURI( "urn:AdminService");

            Vector result = null ;
            Object[]  params = new Object[] { new SOAPBodyElement(input) };
            result = (Vector) call.invoke( params );

            if (result == null || result.isEmpty()) {
                throw new AxisFault(Messages.getMessage("nullResponse00"));
            }

            SOAPBodyElement body = (SOAPBodyElement) result.elementAt(0);
            return body.toString();
        } finally {
            input.close();
        }
    
public voidprocessOpts(org.apache.axis.utils.Options opts)
go from the (parsed) command line to setting properties on our call object.

param
opts
throws
Exception if call==null

        if (call == null) {
            throw new Exception(Messages.getMessage("nullCall00"));
        }

        URL address = new URL(opts.getURL());
        setTargetEndpointAddress(address);
        setLogin(opts.getUser(), opts.getPassword());

        String tName = opts.isValueSet( 't" );
        setTransport(tName);
    
public java.lang.Stringquit()
make a quit command

return
throws
Exception


                
         
        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "<m:quit xmlns:m=\"" + WSDDConstants.URI_WSDD + "\"/>";
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    
public java.lang.Stringquit(org.apache.axis.utils.Options opts)
process the command line ops, then send a quit command

param
opts
return
throws
Exception

        processOpts( opts );
        return quit();
    
public static voidsetDefaultConfiguration(org.apache.axis.EngineConfiguration config)
If the user calls this with an EngineConfiguration object, all AdminClients on this thread will use that EngineConfiguration rather than the default one. This is primarily to enable the deployment of custom transports and handlers.

param
config the EngineConfiguration which should be used


                                                     
        
    
        defaultConfiguration.set(config);
    
public voidsetLogin(java.lang.String user, java.lang.String password)
set the username and password requires that call!=null

param
user username
param
password password

        call.setUsername( user );
        call.setPassword( password );
    
public voidsetTargetEndpointAddress(java.net.URL address)
set the URL to deploy to requires that call!=null

param
address

        call.setTargetEndpointAddress( address );
    
public voidsetTransport(java.lang.String transportName)
set the transport to deploy with. requires that call!=null

param
transportName a null or empty value does not trigger a setting

        if(transportName != null && !transportName.equals("")) {
            call.setProperty( Call.TRANSPORT_NAME, transportName );
        }
    
public java.lang.StringundeployHandler(java.lang.String handlerName)
undeploy a handler

param
handlerName name of the handler to undeploy
return
throws
Exception

        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "<m:"+ROOT_UNDEPLOY +" xmlns:m=\"" + WSDDConstants.URI_WSDD + "\">" +
                                     "<handler name=\"" + handlerName + "\"/>"+
                                     "</m:"+ROOT_UNDEPLOY +">" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    
public java.lang.StringundeployService(java.lang.String serviceName)
undeploy a service

param
serviceName name of service
return
throws
Exception

        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "<m:"+ROOT_UNDEPLOY +" xmlns:m=\"" + WSDDConstants.URI_WSDD + "\">" +
                                     "<service name=\"" + serviceName + "\"/>"+
                                     "</m:"+ROOT_UNDEPLOY +">" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);