blob: d739bd18b33f48e1de353c14733791d13d9d1759 [file] [log] [blame]
/*
* Copyright 2003-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.ws.axis.security.handler;
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.utils.LockableHashtable;
import org.apache.commons.logging.Log;
import org.apache.ws.security.handler.WSHandler;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
/**
* <code>WSDoAllHandler</code> is a utility class which implements simple
* property setting/getting behavior, and stubs out a lot of the Handler
* methods. Extend this class to make writing your Handlers easier, and
* then override what you need to.
*/
public abstract class WSDoAllHandler extends WSHandler implements Handler {
private static Log log =
LogFactory.getLog(WSDoAllHandler.class.getName());
protected boolean makeLockable = false;
protected Hashtable options;
protected String name;
/**
* Should this Handler use a LockableHashtable for options?
* Default is 'false'.
*/
protected void setOptionsLockable(boolean makeLockable) {
this.makeLockable = makeLockable;
}
protected void initHashtable() {
if (makeLockable) {
options = new LockableHashtable();
} else {
options = new Hashtable();
}
}
/**
* Stubbed-out methods. Override in your child class to implement
* any real behavior. Note that there is NOT a stub for invoke(), since
* we require any Handler derivative to implement that.
*/
public void init() {
}
public void cleanup() {
}
public boolean canHandleBlock(QName qname) {
return false;
}
public void onFault(MessageContext msgContext) {
}
/**
* Set the given option (name/value) in this handler's bag of options
*/
public void setOption(String name, Object value) {
if (options == null) initHashtable();
options.put(name, value);
}
/**
* Set a default value for the given option:
* if the option is not already set, then set it.
* if the option is already set, then do not set it.
* <p/>
* If this is called multiple times, the first with a non-null value
* if 'value' will set the default, remaining calls will be ignored.
* <p/>
* Returns true if value set (by this call), otherwise false;
*/
public boolean setOptionDefault(String name, Object value) {
boolean val = (options == null || options.get(name) == null) && value != null;
if (val) {
setOption(name, value);
}
return val;
}
/**
* Returns the option corresponding to <code>name</code>.
*
* @param name the non-null name of the option.
* @return the option on <code>name</code> if <code>name</code>
* exists; otherwise null.
*/
public Object getOption(String name) {
if (name == null) {
throw new IllegalArgumentException("name cannot be null");
}
if (options == null) {
return null;
}
return options.get(name);
}
/**
* Return the entire list of options
*/
public Hashtable getOptions() {
return (options);
}
public void setOptions(Hashtable opts) {
options = opts;
}
/**
* Set the name (i.e. registry key) of this Handler
*/
public void setName(String name) {
this.name = name;
}
/**
* Return the name (i.e. registry key) for this Handler
*/
public String getName() {
return name;
}
public Element getDeploymentData(Document doc) {
log.debug("Enter: BasicHandler::getDeploymentData");
Element root = doc.createElementNS("", "handler");
root.setAttribute("class", this.getClass().getName());
options = this.getOptions();
if (options != null) {
Enumeration e = options.keys();
while (e.hasMoreElements()) {
String k = (String) e.nextElement();
Object v = options.get(k);
Element e1 = doc.createElementNS("", "option");
e1.setAttribute("name", k);
e1.setAttribute("value", v.toString());
root.appendChild(e1);
}
}
log.debug("Exit: WSDoAllHandler::getDeploymentData");
return (root);
}
public void generateWSDL(MessageContext msgContext) throws AxisFault {
}
/**
* Return a list of QNames which this Handler understands. By returning
* a particular QName here, we are committing to fulfilling any contracts
* defined in the specification of the SOAP header with that QName.
*/
public List getUnderstoodHeaders() {
return null;
}
public Object getProperty(Object msgContext, String key) {
return ((MessageContext)msgContext).getProperty(key);
}
public void setProperty(Object msgContext, String key, Object value) {
((MessageContext)msgContext).setProperty(key, value);
}
public String getPassword(Object msgContext) {
return ((MessageContext)msgContext).getPassword();
}
public void setPassword(Object msgContext, String password) {
((MessageContext)msgContext).setPassword(password);
}
}