package org.jboss.axis.deployment.wsdd;
import org.jboss.axis.ConfigurationException;
import org.jboss.axis.EngineConfiguration;
import org.jboss.axis.Handler;
import org.jboss.axis.encoding.SerializationContext;
import org.jboss.axis.utils.ClassUtils;
import org.jboss.axis.utils.Messages;
import org.jboss.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()
{
}
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);
}
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;
}
public WSDDFaultFlow[] getFaultFlows()
{
return null;
}
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;
}
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;
}
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);
return new org.jboss.axis.SimpleTargetedChain(reqHandler, pivot,
respHandler);
}
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)
{
if (requestFlow != null)
{
requestFlow.deployToRegistry(registry);
}
if (responseFlow != null)
{
responseFlow.deployToRegistry(registry);
}
}
}