/* * Copyright 2001-2002,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.deployment.wsdd; import org.apache.axis.components.logger.LogFactory; import org.apache.axis.encoding.SerializationContext; import org.apache.axis.handlers.HandlerInfoChainFactory; import org.apache.axis.utils.ClassUtils; import org.apache.axis.utils.Messages; import org.apache.commons.logging.Log; import org.w3c.dom.Element; import org.xml.sax.helpers.AttributesImpl; import javax.xml.namespace.QName; import javax.xml.rpc.handler.HandlerInfo; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; /** * */ public class WSDDJAXRPCHandlerInfoChain extends WSDDHandler { protected static Log log = LogFactory.getLog(WSDDJAXRPCHandlerInfoChain.class.getName()); private ArrayList _hiList; private HandlerInfoChainFactory _hiChainFactory; private String[] _roles; /** * Default constructor */ public WSDDJAXRPCHandlerInfoChain() { } /** * * @param e (Element) XXX * @throws WSDDException XXX */ public WSDDJAXRPCHandlerInfoChain(Element e) throws WSDDException { super(e); ArrayList infoList = new ArrayList(); _hiList = new ArrayList(); Element[] elements = getChildElements(e, ELEM_WSDD_JAXRPC_HANDLERINFO); if (elements.length != 0) { for (int i = 0; i < elements.length; i++) { WSDDJAXRPCHandlerInfo handlerInfo = new WSDDJAXRPCHandlerInfo(elements[i]); _hiList.add(handlerInfo); String handlerClassName = handlerInfo.getHandlerClassName(); Class handlerClass = null; try { handlerClass = ClassUtils.forName(handlerClassName); } catch (ClassNotFoundException cnf) { log.error(Messages.getMessage("handlerInfoChainNoClass00", handlerClassName), cnf); } Map handlerMap = handlerInfo.getHandlerMap(); QName[] headers = handlerInfo.getHeaders(); if (handlerClass != null) { HandlerInfo hi = new HandlerInfo(handlerClass, handlerMap, headers); infoList.add(hi); } } } _hiChainFactory = new HandlerInfoChainFactory(infoList); elements = getChildElements(e, ELEM_WSDD_JAXRPC_ROLE); if (elements.length != 0) { ArrayList roleList = new ArrayList(); for (int i = 0; i < elements.length; i++) { String role = elements[i].getAttribute( ATTR_SOAPACTORNAME); roleList.add(role); } _roles =new String[roleList.size()]; _roles = (String[]) roleList.toArray(_roles); _hiChainFactory.setRoles(_roles); } } public HandlerInfoChainFactory getHandlerChainFactory() { return _hiChainFactory; } public void setHandlerChainFactory(HandlerInfoChainFactory handlerInfoChainFactory) { _hiChainFactory = handlerInfoChainFactory; } protected QName getElementName() { return WSDDConstants.QNAME_JAXRPC_HANDLERINFOCHAIN; } /** * Write this element out to a SerializationContext */ public void writeToContext(SerializationContext context) throws IOException { context.startElement(QNAME_JAXRPC_HANDLERINFOCHAIN,null); List his = _hiList; Iterator iter = his.iterator(); while (iter.hasNext()) { WSDDJAXRPCHandlerInfo hi = (WSDDJAXRPCHandlerInfo) iter.next(); hi.writeToContext(context); } if (_roles != null) { for (int i=0; i < _roles.length ; i++) { AttributesImpl attrs1 = new AttributesImpl(); attrs1.addAttribute("", ATTR_SOAPACTORNAME, ATTR_SOAPACTORNAME, "CDATA", _roles[i]); context.startElement(QNAME_JAXRPC_ROLE,attrs1); context.endElement(); } } context.endElement(); } public ArrayList getHandlerInfoList() { return _hiList; } public void setHandlerInfoList(ArrayList hiList) { _hiList = hiList; } public String[] getRoles() { return _roles; } public void setRoles(String[] roles) { _roles = roles; } }