package org.jboss.webservice.metadata;
import org.jboss.deployment.DeploymentException;
import org.jboss.webservice.metadata.ServiceRefMetaData;
import org.jboss.metadata.MetaData;
import org.w3c.dom.Element;
import javax.xml.rpc.JAXRPCException;
import java.io.Serializable;
import java.util.Properties;
import java.util.Iterator;
public class PortComponentRefMetaData implements Serializable
{
static final long serialVersionUID = 3856598615591044263L;
private ServiceRefMetaData serviceRefMetaData;
private String serviceEndpointInterface;
private String portComponentLink;
private Properties callProperties;
public PortComponentRefMetaData(ServiceRefMetaData serviceRefMetaData)
{
this.serviceRefMetaData = serviceRefMetaData;
}
public ServiceRefMetaData getServiceRefMetaData()
{
return serviceRefMetaData;
}
public String getPortComponentLink()
{
return portComponentLink;
}
public String getServiceEndpointInterface()
{
return serviceEndpointInterface;
}
public Class getServiceEndpointInterfaceClass()
{
try
{
ClassLoader cl = serviceRefMetaData.getResourceCL();
return cl.loadClass(serviceEndpointInterface);
}
catch (ClassNotFoundException e)
{
throw new JAXRPCException("Cannot load service endpoint interface: " + serviceEndpointInterface);
}
}
public Properties getCallProperties()
{
return callProperties;
}
public void importStandardXml(Element element)
throws DeploymentException
{
serviceEndpointInterface = MetaData.getUniqueChildContent(element, "service-endpoint-interface");
portComponentLink = MetaData.getOptionalChildContent(element, "port-component-link");
}
public void importJBossXml(Element element) throws DeploymentException
{
Iterator iterator = MetaData.getChildrenByTagName(element, "call-property");
while (iterator.hasNext())
{
Element propElement = (Element) iterator.next();
String name = MetaData.getUniqueChildContent(propElement, "prop-name");
String value = MetaData.getUniqueChildContent(propElement, "prop-value");
if( callProperties == null )
callProperties = new Properties();
callProperties.setProperty(name, value);
}
}
}