aoqi@0: /* aoqi@0: * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: package com.sun.xml.internal.ws.handler; aoqi@0: aoqi@0: import com.sun.xml.internal.ws.api.BindingID; aoqi@0: import com.sun.xml.internal.ws.api.WSBinding; aoqi@0: import com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil; aoqi@0: import com.sun.xml.internal.ws.transport.http.DeploymentDescriptorParser; aoqi@0: import com.sun.xml.internal.ws.util.HandlerAnnotationInfo; aoqi@0: import com.sun.xml.internal.ws.util.JAXWSUtils; aoqi@0: import com.sun.xml.internal.ws.util.UtilException; aoqi@0: aoqi@0: import javax.annotation.PostConstruct; aoqi@0: import javax.xml.namespace.QName; aoqi@0: import javax.xml.stream.XMLStreamConstants; aoqi@0: import javax.xml.stream.XMLStreamReader; aoqi@0: import javax.xml.ws.handler.Handler; aoqi@0: import javax.xml.ws.handler.PortInfo; aoqi@0: import java.lang.reflect.Method; aoqi@0: import java.util.ArrayList; aoqi@0: import java.util.HashSet; aoqi@0: import java.util.List; aoqi@0: import java.util.Set; aoqi@0: import java.util.StringTokenizer; aoqi@0: import java.util.logging.Logger; aoqi@0: aoqi@0: aoqi@0: public class HandlerChainsModel { aoqi@0: private static final Logger logger = Logger.getLogger( aoqi@0: com.sun.xml.internal.ws.util.Constants.LoggingDomain + ".util"); aoqi@0: aoqi@0: private Class annotatedClass; aoqi@0: private List handlerChains; aoqi@0: private String id; aoqi@0: /** Creates a new instance of HandlerChains */ aoqi@0: private HandlerChainsModel(Class annotatedClass) { aoqi@0: this.annotatedClass = annotatedClass; aoqi@0: } aoqi@0: aoqi@0: private List getHandlerChain() { aoqi@0: if (handlerChains == null) { aoqi@0: handlerChains = new ArrayList(); aoqi@0: } aoqi@0: return handlerChains; aoqi@0: } aoqi@0: aoqi@0: public String getId() { aoqi@0: return id; aoqi@0: } aoqi@0: aoqi@0: public void setId(String value) { aoqi@0: this.id = value; aoqi@0: } aoqi@0: /** aoqi@0: * reader should be on element aoqi@0: */ aoqi@0: public static HandlerChainsModel parseHandlerConfigFile(Class annotatedClass, XMLStreamReader reader) { aoqi@0: ensureProperName(reader,QNAME_HANDLER_CHAINS); aoqi@0: HandlerChainsModel handlerModel = new HandlerChainsModel(annotatedClass); aoqi@0: List hChains = handlerModel.getHandlerChain(); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: aoqi@0: while (reader.getName().equals(QNAME_HANDLER_CHAIN)) { aoqi@0: HandlerChainType hChain = new HandlerChainType(); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: aoqi@0: if (reader.getName().equals(QNAME_CHAIN_PORT_PATTERN)) { aoqi@0: QName portNamePattern = XMLStreamReaderUtil.getElementQName(reader); aoqi@0: hChain.setPortNamePattern(portNamePattern); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } else if (reader.getName().equals(QNAME_CHAIN_PROTOCOL_BINDING)) { aoqi@0: String bindingList = XMLStreamReaderUtil.getElementText(reader); aoqi@0: StringTokenizer stk = new StringTokenizer(bindingList); aoqi@0: while(stk.hasMoreTokens()) { aoqi@0: String token = stk.nextToken(); aoqi@0: // This will convert tokens into Binding URI aoqi@0: hChain.addProtocolBinding(token); aoqi@0: } aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } else if (reader.getName().equals(QNAME_CHAIN_SERVICE_PATTERN)) { aoqi@0: QName serviceNamepattern = XMLStreamReaderUtil.getElementQName(reader); aoqi@0: hChain.setServiceNamePattern(serviceNamepattern); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } aoqi@0: List handlers = hChain.getHandlers(); aoqi@0: // process all elements aoqi@0: while (reader.getName().equals(QNAME_HANDLER)) { aoqi@0: HandlerType handler = new HandlerType(); aoqi@0: aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: if (reader.getName().equals(QNAME_HANDLER_NAME)) { aoqi@0: String handlerName = aoqi@0: XMLStreamReaderUtil.getElementText(reader).trim(); aoqi@0: handler.setHandlerName(handlerName); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: // handler class aoqi@0: ensureProperName(reader, QNAME_HANDLER_CLASS); aoqi@0: String handlerClass = aoqi@0: XMLStreamReaderUtil.getElementText(reader).trim(); aoqi@0: handler.setHandlerClass(handlerClass); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: aoqi@0: // init params (ignored) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_PARAM)) { aoqi@0: skipInitParamElement(reader); aoqi@0: } aoqi@0: aoqi@0: // headers (ignored) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_HEADER)) { aoqi@0: skipTextElement(reader); aoqi@0: } aoqi@0: aoqi@0: // roles (not stored per handler) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_ROLE)) { aoqi@0: List soapRoles = handler.getSoapRoles(); aoqi@0: soapRoles.add(XMLStreamReaderUtil.getElementText(reader)); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: handlers.add(handler); aoqi@0: aoqi@0: // move past aoqi@0: ensureProperName(reader, QNAME_HANDLER); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: // move past aoqi@0: ensureProperName(reader, QNAME_HANDLER_CHAIN); aoqi@0: hChains.add(hChain); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: return handlerModel; aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: *

This method is called internally by HandlerAnnotationProcessor, aoqi@0: * and by aoqi@0: * {@link com.sun.xml.internal.ws.transport.http.DeploymentDescriptorParser} aoqi@0: * directly when it reaches the handler chains element in the aoqi@0: * descriptor file it is parsing. aoqi@0: * @param reader should be on element aoqi@0: * @return A HandlerAnnotationInfo object that stores the aoqi@0: * handlers and roles. aoqi@0: */ aoqi@0: aoqi@0: aoqi@0: aoqi@0: public static HandlerAnnotationInfo parseHandlerFile(XMLStreamReader reader, aoqi@0: ClassLoader classLoader, QName serviceName, QName portName, aoqi@0: WSBinding wsbinding) { aoqi@0: ensureProperName(reader,QNAME_HANDLER_CHAINS); aoqi@0: String bindingId = wsbinding.getBindingId().toString(); aoqi@0: HandlerAnnotationInfo info = new HandlerAnnotationInfo(); aoqi@0: aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: aoqi@0: List handlerChain = new ArrayList(); aoqi@0: Set roles = new HashSet(); aoqi@0: aoqi@0: while (reader.getName().equals(QNAME_HANDLER_CHAIN)) { aoqi@0: aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: aoqi@0: if (reader.getName().equals(QNAME_CHAIN_PORT_PATTERN)) { aoqi@0: if (portName == null) { aoqi@0: logger.warning("handler chain sepcified for port " + aoqi@0: "but port QName passed to parser is null"); aoqi@0: } aoqi@0: boolean parseChain = JAXWSUtils.matchQNames(portName, aoqi@0: XMLStreamReaderUtil.getElementQName(reader)); aoqi@0: if (!parseChain) { aoqi@0: skipChain(reader); aoqi@0: continue; aoqi@0: } aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } else if (reader.getName().equals(QNAME_CHAIN_PROTOCOL_BINDING)) { aoqi@0: if (bindingId == null) { aoqi@0: logger.warning("handler chain sepcified for bindingId " + aoqi@0: "but bindingId passed to parser is null"); aoqi@0: } aoqi@0: String bindingConstraint = XMLStreamReaderUtil.getElementText(reader); aoqi@0: boolean skipThisChain = true; aoqi@0: StringTokenizer stk = new StringTokenizer(bindingConstraint); aoqi@0: List bindingList = new ArrayList(); aoqi@0: while(stk.hasMoreTokens()) { aoqi@0: String tokenOrURI = stk.nextToken(); aoqi@0: /* aoqi@0: Convert short-form tokens to API's binding ids aoqi@0: Unknown token, Put it as it is aoqi@0: */ aoqi@0: tokenOrURI = DeploymentDescriptorParser.getBindingIdForToken(tokenOrURI); aoqi@0: String binding = BindingID.parse(tokenOrURI).toString(); aoqi@0: bindingList.add(binding); aoqi@0: } aoqi@0: if(bindingList.contains(bindingId)){ aoqi@0: skipThisChain = false; aoqi@0: } aoqi@0: aoqi@0: if (skipThisChain) { aoqi@0: skipChain(reader); aoqi@0: continue; aoqi@0: } aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } else if (reader.getName().equals(QNAME_CHAIN_SERVICE_PATTERN)) { aoqi@0: if (serviceName == null) { aoqi@0: logger.warning("handler chain sepcified for service " + aoqi@0: "but service QName passed to parser is null"); aoqi@0: } aoqi@0: boolean parseChain = JAXWSUtils.matchQNames( aoqi@0: serviceName, aoqi@0: XMLStreamReaderUtil.getElementQName(reader)); aoqi@0: if (!parseChain) { aoqi@0: skipChain(reader); aoqi@0: continue; aoqi@0: } aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } aoqi@0: aoqi@0: // process all elements aoqi@0: while (reader.getName().equals(QNAME_HANDLER)) { aoqi@0: Handler handler; aoqi@0: aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: if (reader.getName().equals(QNAME_HANDLER_NAME)) { aoqi@0: skipTextElement(reader); aoqi@0: } aoqi@0: aoqi@0: // handler class aoqi@0: ensureProperName(reader, QNAME_HANDLER_CLASS); aoqi@0: try { aoqi@0: handler = (Handler) loadClass(classLoader, aoqi@0: XMLStreamReaderUtil.getElementText(reader).trim()).newInstance(); aoqi@0: } catch (InstantiationException ie){ aoqi@0: throw new RuntimeException(ie); aoqi@0: } catch (IllegalAccessException e) { aoqi@0: throw new RuntimeException(e); aoqi@0: } aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: aoqi@0: // init params (ignored) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_PARAM)) { aoqi@0: skipInitParamElement(reader); aoqi@0: } aoqi@0: aoqi@0: // headers (ignored) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_HEADER)) { aoqi@0: skipTextElement(reader); aoqi@0: } aoqi@0: aoqi@0: // roles (not stored per handler) aoqi@0: while (reader.getName().equals(QNAME_HANDLER_ROLE)) { aoqi@0: roles.add(XMLStreamReaderUtil.getElementText(reader)); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: // call @PostConstruct method on handler if present aoqi@0: for (Method method : handler.getClass().getMethods()) { aoqi@0: if (method.getAnnotation(PostConstruct.class) == null) { aoqi@0: continue; aoqi@0: } aoqi@0: try { aoqi@0: method.invoke(handler, new Object [0]); aoqi@0: break; aoqi@0: } catch (Exception e) { aoqi@0: throw new RuntimeException(e); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: handlerChain.add(handler); aoqi@0: aoqi@0: // move past aoqi@0: ensureProperName(reader, QNAME_HANDLER); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: // move past aoqi@0: ensureProperName(reader, QNAME_HANDLER_CHAIN); aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: } aoqi@0: aoqi@0: info.setHandlers(handlerChain); aoqi@0: info.setRoles(roles); aoqi@0: return info; aoqi@0: } aoqi@0: aoqi@0: public HandlerAnnotationInfo getHandlersForPortInfo(PortInfo info){ aoqi@0: aoqi@0: HandlerAnnotationInfo handlerInfo = new HandlerAnnotationInfo(); aoqi@0: List handlerClassList = new ArrayList(); aoqi@0: Set roles = new HashSet(); aoqi@0: aoqi@0: for(HandlerChainType hchain : handlerChains) { aoqi@0: boolean hchainMatched = false; aoqi@0: if((!hchain.isConstraintSet()) || aoqi@0: JAXWSUtils.matchQNames(info.getServiceName(), hchain.getServiceNamePattern()) || aoqi@0: JAXWSUtils.matchQNames(info.getPortName(), hchain.getPortNamePattern()) || aoqi@0: hchain.getProtocolBindings().contains(info.getBindingID()) ){ aoqi@0: hchainMatched = true; aoqi@0: aoqi@0: } aoqi@0: if(hchainMatched) { aoqi@0: for(HandlerType handler : hchain.getHandlers()) { aoqi@0: try { aoqi@0: Handler handlerClass = (Handler) loadClass(annotatedClass.getClassLoader(), aoqi@0: handler.getHandlerClass()).newInstance(); aoqi@0: callHandlerPostConstruct(handlerClass); aoqi@0: handlerClassList.add(handlerClass); aoqi@0: } catch (InstantiationException ie){ aoqi@0: throw new RuntimeException(ie); aoqi@0: } catch (IllegalAccessException e) { aoqi@0: throw new RuntimeException(e); aoqi@0: } aoqi@0: aoqi@0: roles.addAll(handler.getSoapRoles()); aoqi@0: } aoqi@0: aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: handlerInfo.setHandlers(handlerClassList); aoqi@0: handlerInfo.setRoles(roles); aoqi@0: return handlerInfo; aoqi@0: aoqi@0: } aoqi@0: aoqi@0: private static Class loadClass(ClassLoader loader, String name) { aoqi@0: try { aoqi@0: return Class.forName(name, true, loader); aoqi@0: } catch (ClassNotFoundException e) { aoqi@0: throw new UtilException( aoqi@0: "util.handler.class.not.found", aoqi@0: name); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: private static void callHandlerPostConstruct(Object handlerClass) { aoqi@0: // call @PostConstruct method on handler if present aoqi@0: for (Method method : handlerClass.getClass().getMethods()) { aoqi@0: if (method.getAnnotation(PostConstruct.class) == null) { aoqi@0: continue; aoqi@0: } aoqi@0: try { aoqi@0: method.invoke(handlerClass, new Object [0]); aoqi@0: break; aoqi@0: } catch (Exception e) { aoqi@0: throw new RuntimeException(e); aoqi@0: } aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: private static void skipChain(XMLStreamReader reader) { aoqi@0: while (XMLStreamReaderUtil.nextContent(reader) != aoqi@0: XMLStreamConstants.END_ELEMENT || aoqi@0: !reader.getName().equals(QNAME_HANDLER_CHAIN)) {} aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } aoqi@0: aoqi@0: private static void skipTextElement(XMLStreamReader reader) { aoqi@0: XMLStreamReaderUtil.nextContent(reader); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } aoqi@0: aoqi@0: private static void skipInitParamElement(XMLStreamReader reader) { aoqi@0: int state; aoqi@0: do { aoqi@0: state = XMLStreamReaderUtil.nextContent(reader); aoqi@0: } while (state != XMLStreamReader.END_ELEMENT || aoqi@0: !reader.getName().equals(QNAME_HANDLER_PARAM)); aoqi@0: XMLStreamReaderUtil.nextElementContent(reader); aoqi@0: } aoqi@0: aoqi@0: private static void ensureProperName(XMLStreamReader reader, aoqi@0: QName expectedName) { aoqi@0: aoqi@0: if (!reader.getName().equals(expectedName)) { aoqi@0: failWithLocalName("util.parser.wrong.element", reader, aoqi@0: expectedName.getLocalPart()); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: static void ensureProperName(XMLStreamReader reader, String expectedName) { aoqi@0: if (!reader.getLocalName().equals(expectedName)) { aoqi@0: failWithLocalName("util.parser.wrong.element", reader, aoqi@0: expectedName); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: private static void failWithLocalName(String key, aoqi@0: XMLStreamReader reader, String arg) { aoqi@0: throw new UtilException(key, aoqi@0: Integer.toString(reader.getLocation().getLineNumber()), aoqi@0: reader.getLocalName(), aoqi@0: arg ); aoqi@0: } aoqi@0: aoqi@0: public static final String PROTOCOL_SOAP11_TOKEN = "##SOAP11_HTTP"; aoqi@0: public static final String PROTOCOL_SOAP12_TOKEN = "##SOAP12_HTTP"; aoqi@0: public static final String PROTOCOL_XML_TOKEN = "##XML_HTTP"; aoqi@0: aoqi@0: public static final String NS_109 = aoqi@0: "http://java.sun.com/xml/ns/javaee"; aoqi@0: public static final QName QNAME_CHAIN_PORT_PATTERN = aoqi@0: new QName(NS_109, "port-name-pattern"); aoqi@0: public static final QName QNAME_CHAIN_PROTOCOL_BINDING = aoqi@0: new QName(NS_109, "protocol-bindings"); aoqi@0: public static final QName QNAME_CHAIN_SERVICE_PATTERN = aoqi@0: new QName(NS_109, "service-name-pattern"); aoqi@0: public static final QName QNAME_HANDLER_CHAIN = aoqi@0: new QName(NS_109, "handler-chain"); aoqi@0: public static final QName QNAME_HANDLER_CHAINS = aoqi@0: new QName(NS_109, "handler-chains"); aoqi@0: public static final QName QNAME_HANDLER = aoqi@0: new QName(NS_109, "handler"); aoqi@0: public static final QName QNAME_HANDLER_NAME = aoqi@0: new QName(NS_109, "handler-name"); aoqi@0: public static final QName QNAME_HANDLER_CLASS = aoqi@0: new QName(NS_109, "handler-class"); aoqi@0: public static final QName QNAME_HANDLER_PARAM = aoqi@0: new QName(NS_109, "init-param"); aoqi@0: public static final QName QNAME_HANDLER_PARAM_NAME = aoqi@0: new QName(NS_109, "param-name"); aoqi@0: public static final QName QNAME_HANDLER_PARAM_VALUE = aoqi@0: new QName(NS_109, "param-value"); aoqi@0: public static final QName QNAME_HANDLER_HEADER = aoqi@0: new QName(NS_109, "soap-header"); aoqi@0: public static final QName QNAME_HANDLER_ROLE = aoqi@0: new QName(NS_109, "soap-role"); aoqi@0: aoqi@0: static class HandlerChainType { aoqi@0: //constraints aoqi@0: QName serviceNamePattern; aoqi@0: QName portNamePattern; aoqi@0: List protocolBindings; aoqi@0: aoqi@0: // This flag is set if one of the above constraint is set on handler chain aoqi@0: boolean constraintSet = false; aoqi@0: aoqi@0: List handlers; aoqi@0: String id; aoqi@0: aoqi@0: aoqi@0: /** Creates a new instance of HandlerChain */ aoqi@0: public HandlerChainType() { aoqi@0: protocolBindings = new ArrayList(); aoqi@0: } aoqi@0: aoqi@0: public void setServiceNamePattern(QName value) { aoqi@0: this.serviceNamePattern = value; aoqi@0: constraintSet = true; aoqi@0: } aoqi@0: aoqi@0: public QName getServiceNamePattern() { aoqi@0: return serviceNamePattern; aoqi@0: } aoqi@0: aoqi@0: public void setPortNamePattern(QName value) { aoqi@0: this.portNamePattern = value; aoqi@0: constraintSet = true; aoqi@0: } aoqi@0: aoqi@0: public QName getPortNamePattern() { aoqi@0: return portNamePattern; aoqi@0: } aoqi@0: aoqi@0: public List getProtocolBindings() { aoqi@0: return this.protocolBindings; aoqi@0: } aoqi@0: aoqi@0: public void addProtocolBinding(String tokenOrURI){ aoqi@0: /* aoqi@0: Convert short-form tokens to API's binding ids aoqi@0: Unknown token, Put it as it is aoqi@0: */ aoqi@0: tokenOrURI = DeploymentDescriptorParser.getBindingIdForToken(tokenOrURI); aoqi@0: String binding = BindingID.parse(tokenOrURI).toString(); aoqi@0: protocolBindings.add(binding); aoqi@0: constraintSet = true; aoqi@0: } aoqi@0: aoqi@0: public boolean isConstraintSet() { aoqi@0: return constraintSet || !protocolBindings.isEmpty(); aoqi@0: } aoqi@0: public java.lang.String getId() { aoqi@0: return id; aoqi@0: } aoqi@0: aoqi@0: public void setId(java.lang.String value) { aoqi@0: this.id = value; aoqi@0: } aoqi@0: aoqi@0: public List getHandlers() { aoqi@0: if (handlers == null) { aoqi@0: handlers = new ArrayList(); aoqi@0: } aoqi@0: return this.handlers; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: static class HandlerType { aoqi@0: String handlerName; aoqi@0: String handlerClass; aoqi@0: List soapRoles; aoqi@0: aoqi@0: java.lang.String id; aoqi@0: aoqi@0: /** Creates a new instance of HandlerComponent */ aoqi@0: public HandlerType() { aoqi@0: } aoqi@0: aoqi@0: public String getHandlerName() { aoqi@0: return handlerName; aoqi@0: } aoqi@0: aoqi@0: public void setHandlerName(String value) { aoqi@0: this.handlerName = value; aoqi@0: } aoqi@0: aoqi@0: public String getHandlerClass() { aoqi@0: return handlerClass; aoqi@0: } aoqi@0: aoqi@0: public void setHandlerClass(String value) { aoqi@0: this.handlerClass = value; aoqi@0: } aoqi@0: aoqi@0: public java.lang.String getId() { aoqi@0: return id; aoqi@0: } aoqi@0: aoqi@0: public void setId(java.lang.String value) { aoqi@0: this.id = value; aoqi@0: } aoqi@0: aoqi@0: public List getSoapRoles() { aoqi@0: if (soapRoles == null) { aoqi@0: soapRoles = new ArrayList(); aoqi@0: } aoqi@0: return this.soapRoles; aoqi@0: } aoqi@0: } aoqi@0: }