All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis.client.AdminClient Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.axis.client ;

import org.apache.axis.AxisFault;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.deployment.wsdd.WSDDConstants;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.utils.Messages;
import org.apache.axis.utils.Options;
import org.apache.axis.utils.StringUtils;
import org.apache.commons.logging.Log;

import javax.xml.rpc.ServiceException;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Vector;


/**
 * An admin client object that can be used both from the command line
 * and programmatically.
 *
 * @author Rob Jellinghaus ([email protected])
 * @author Doug Davis ([email protected])
 * @author Simeon Simeonov ([email protected])
 */

public class AdminClient
{
    protected static Log log =
        LogFactory.getLog(AdminClient.class.getName());

    private static ThreadLocal defaultConfiguration = new ThreadLocal();

    /**
     * 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
     */
    public static void setDefaultConfiguration(EngineConfiguration config)
    {
        defaultConfiguration.set(config);
    }

    private static String getUsageInfo()
    {
        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();
    }


    /**
     * the object that represents our call
     */
    protected Call call;

    /**
     * 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'
     */
    public AdminClient()
    {
        try {
            initAdminClient();
        } catch (ServiceException e) {
            System.err.println(Messages.getMessage("couldntCall00") + ": " + e);
            call = null;
        }
    }


    /**
     * this is a somwhat contrived variant constructor, one that throws an exception
     * if things go wrong.
     * @param ignored
     */
    public AdminClient(boolean ignored) throws ServiceException {
        initAdminClient();
    }

    /**
     * core initialisation routine
     *
     * @throws ServiceException
     */
    private void initAdminClient() 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();
    }


    /**
     * External access to our CallCall object this instance uses
     */
    public Call getCall()
    {
        return call;
    }

    /**
     * process the options then run a list call
     * @param opts
     * @return
     * @throws Exception
     */
    public String list(Options opts) throws Exception {
        processOpts( opts );
        return list();
    }

    /**
     * send a list command
     * @return the response from the call
     * @throws Exception
     */
    public String list() throws Exception {
        log.debug( Messages.getMessage("doList00") );
        String               str   = "" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    }

    /**
     * process the command line ops, then send a quit command
     * @param opts
     * @return
     * @throws Exception
     */
    public String quit(Options opts) throws Exception {
        processOpts( opts );
        return quit();
    }

    /**
     * root element of the undeploy request
     */
    protected static final String ROOT_UNDEPLOY= WSDDConstants.QNAME_UNDEPLOY.getLocalPart();

    /**
     * make a quit command
     * @return
     * @throws Exception
     */
    public String quit() throws Exception {
        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "";
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    }

    /**
     * undeploy a handler
     * @param handlerName name of the handler to undeploy
     * @return
     * @throws Exception
     */
    public String undeployHandler(String handlerName) throws Exception {
        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "" +
                                     ""+
                                     "" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    }

    /**
     * undeploy a service
     * @param serviceName name of service
     * @return
     * @throws Exception
     */
    public String undeployService(String serviceName) throws Exception {
        log.debug(Messages.getMessage("doQuit00"));
        String               str   = "" +
                                     ""+
                                     "" ;
        ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes());
        return process(input);
    }

    /**
     * 

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 */ public String process(String[] args) throws Exception { 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 | ]")); 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 = ""; str += args[i + 1]; str += ""; 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(); } /** * go from the (parsed) command line to setting properties on our call object. * @param opts * @throws Exception if call==null */ public void processOpts(Options opts) throws Exception { 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); } /** * set the username and password * requires that call!=null * @param user username * @param password password */ public void setLogin(String user, String password) { call.setUsername( user ); call.setPassword( password ); } /** * set the URL to deploy to * requires that call!=null * @param address */ public void setTargetEndpointAddress(URL address) { call.setTargetEndpointAddress( address ); } /** * set the transport to deploy with. * requires that call!=null * @param transportName a null or empty value does not trigger a setting */ public void setTransport(String transportName) { if(transportName != null && !transportName.equals("")) { call.setProperty( Call.TRANSPORT_NAME, transportName ); } } public String process(InputStream input) throws Exception { return process(null, input ); } public String process(URL xmlURL) throws Exception { return process(null, xmlURL.openStream() ); } /** * process an XML file containing a pre-prepared admin message * @param xmlFile file to load * @return * @throws Exception */ public String process(String xmlFile) throws Exception { FileInputStream in = new FileInputStream(xmlFile); String result = process(null, in ); return result ; } public String process(Options opts, String xmlFile) throws Exception { processOpts( opts ); return process( xmlFile ); } /** * 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 */ public String process(Options opts, InputStream input) throws Exception { 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(); } } /** * Creates in instance of AdminClient and * invokes process(args). *

Diagnostic output goes to log.info.

* @param args Commands to process */ public static void main (String[] args) { 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); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy