/* * 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.deployment.wsdd; import org.apache.axis.ConfigurationException; import org.apache.axis.EngineConfiguration; import org.apache.axis.Handler; import org.apache.axis.encoding.SerializationContext; import org.apache.axis.utils.ClassUtils; import org.apache.axis.utils.Messages; import org.apache.axis.utils.XMLUtils; import org.w3c.dom.Element; import javax.xml.namespace.QName; import java.io.IOException; /** * */ public abstract class WSDDTargetedChain extends WSDDDeployableItem { private WSDDRequestFlow requestFlow; private WSDDResponseFlow responseFlow; private QName pivotQName; protected WSDDTargetedChain() { } /** * * @param e (Element) XXX * @throws WSDDException XXX */ protected WSDDTargetedChain(Element e) throws WSDDException { super(e); Element reqEl = getChildElement(e, ELEM_WSDD_REQFLOW); if (reqEl != null && reqEl.getElementsByTagName("*").getLength()>0) { requestFlow = new WSDDRequestFlow(reqEl); } Element respEl = getChildElement(e, ELEM_WSDD_RESPFLOW); if (respEl != null && respEl.getElementsByTagName("*").getLength()>0) { responseFlow = new WSDDResponseFlow(respEl); } // !!! pivot? use polymorphic method? String pivotStr = e.getAttribute(ATTR_PIVOT); if (pivotStr != null && !pivotStr.equals("")) pivotQName = XMLUtils.getQNameFromString(pivotStr, e); } public WSDDRequestFlow getRequestFlow() { return requestFlow; } public void setRequestFlow(WSDDRequestFlow flow) { requestFlow = flow; } public WSDDResponseFlow getResponseFlow() { return responseFlow; } public void setResponseFlow(WSDDResponseFlow flow) { responseFlow = flow; } /** * * @return XXX */ public WSDDFaultFlow[] getFaultFlows() { return null; } /** * * @param name XXX * @return XXX */ public WSDDFaultFlow getFaultFlow(QName name) { WSDDFaultFlow[] t = getFaultFlows(); for (int n = 0; n < t.length; n++) { if (t[n].getQName().equals(name)) { return t[n]; } } return null; } /** * * @param type XXX */ public void setType(String type) throws WSDDException { throw new WSDDException(Messages.getMessage( "noTypeSetting", getElementName().getLocalPart())); } public QName getPivotQName() { return pivotQName; } public void setPivotQName(QName pivotQName) { this.pivotQName = pivotQName; } /** * * @param pivot XXX * @param registry XXX * @return XXX * @throws ConfigurationException XXX */ public Handler makeNewInstance(EngineConfiguration registry) throws ConfigurationException { Handler reqHandler = null; WSDDChain req = getRequestFlow(); if (req != null) reqHandler = req.getInstance(registry); Handler pivot = null; if (pivotQName != null) { if (URI_WSDD_JAVA.equals(pivotQName.getNamespaceURI())) { try { pivot = (Handler)ClassUtils.forName(pivotQName.getLocalPart()).newInstance(); } catch (InstantiationException e) { throw new ConfigurationException(e); } catch (IllegalAccessException e) { throw new ConfigurationException(e); } catch (ClassNotFoundException e) { throw new ConfigurationException(e); } } else { pivot = registry.getHandler(pivotQName); } } Handler respHandler = null; WSDDChain resp = getResponseFlow(); if (resp != null) respHandler = resp.getInstance(registry); Handler retVal = new org.apache.axis.SimpleTargetedChain(reqHandler, pivot, respHandler); retVal.setOptions(getParametersTable()); return retVal; } /** * Write this element out to a SerializationContext */ public final void writeFlowsToContext(SerializationContext context) throws IOException { if (requestFlow != null) { requestFlow.writeToContext(context); } if (responseFlow != null) { responseFlow.writeToContext(context); } } public void deployToRegistry(WSDDDeployment registry) { // deploy any named subparts if (requestFlow != null) { requestFlow.deployToRegistry(registry); } if (responseFlow != null) { responseFlow.deployToRegistry(registry); } } }