FileDocCategorySizeDatePackage
ServiceRefNode.javaAPI DocGlassfish v2 API10082Fri May 04 22:31:42 BST 2007com.sun.enterprise.deployment.node.runtime

ServiceRefNode

public class ServiceRefNode extends com.sun.enterprise.deployment.node.DeploymentDescriptorNode
This node is responsible for handling runtime info for service references
author
Kenneth Saks
version

Fields Summary
private com.sun.enterprise.deployment.ServiceReferenceDescriptor
descriptor
Constructors Summary
public ServiceRefNode()

        super();
        registerElementHandler
            (new XMLElement(WebServicesTagNames.PORT_INFO),
             ServiceRefPortInfoRuntimeNode.class);
        registerElementHandler
            (new XMLElement(WebServicesTagNames.CALL_PROPERTY),
             NameValuePairNode.class, "addCallProperty");
    
Methods Summary
public voidaddDescriptor(java.lang.Object desc)

        if( desc instanceof ServiceRefPortInfo ) {
            ServiceRefPortInfo newPortInfo = (ServiceRefPortInfo) desc;
            ServiceReferenceDescriptor serviceRef =
                (ServiceReferenceDescriptor) getDescriptor();
            serviceRef.addRuntimePortInfo(newPortInfo);
        } 
    
public java.lang.ObjectgetDescriptor()

return
the descriptor instance to associate with this XMLNode

        return descriptor;
    
protected java.util.MapgetDispatchTable()
all sub-implementation of this class can use a dispatch table to map xml element to method name on the descriptor class for setting the element value.

return
the map with the element name as a key, the setter method as a value

    
        Map table = super.getDispatchTable();
        table.put(WebServicesTagNames.SERVICE_IMPL_CLASS, 
                  "setServiceImplClassName");
        return table;
    
public voidsetElementValue(com.sun.enterprise.deployment.node.XMLElement element, java.lang.String value)
receives notiification of the value for a particular tag

param
element the xml element
param
value it's associated value

        String name = element.getQName();
        if (WebServicesTagNames.SERVICE_REF_NAME.equals(name)) {
            Object parentDesc = getParentNode().getDescriptor();
            if (parentDesc instanceof JndiNameEnvironment) {
                descriptor = ((JndiNameEnvironment) parentDesc).
                    getServiceReferenceByName(value);
            } else if (parentDesc instanceof SunWebApp) {
                WebBundleDescriptor desc = ((WebBundleRuntimeNode) getParentNode()).getWebBundleDescriptor();
                descriptor = desc.getServiceReferenceByName(value);
            }
        } else if (WebServicesTagNames.NAMESPACE_URI.equals(name)) {
            // Any service-qname set in standard DD takes precedence
            if( descriptor.getServiceNamespaceUri() == null ) {
                descriptor.setServiceNamespaceUri(value);
            }
        } else if (WebServicesTagNames.LOCAL_PART.equals(name)) {
            // Any service-qname set in standard DD takes precedence
            if( descriptor.getServiceLocalPart() == null ) {
                descriptor.setServiceLocalPart(value);
            }
        } else if (WebServicesTagNames.WSDL_OVERRIDE.equals(name)) {
            try {
                URL url = new URL(value);
                descriptor.setWsdlOverride(url);
            } catch(MalformedURLException mue) {
                DOLUtils.getDefaultLogger().log(Level.INFO,
                  "Warning : Invalid wsdl override url=" + value, mue);
            }
        } else {
            super.setElementValue(element, value);
        }
        
    
public org.w3c.dom.NodewriteDescriptor(org.w3c.dom.Node parent, java.lang.String nodeName, com.sun.enterprise.deployment.ServiceReferenceDescriptor serviceRef)
write the descriptor class to a DOM tree and return it

param
parent node for the DOM tree
param
node name for the descriptor
param
the descriptor to write
return
the DOM tree top node

        Node serviceRefNode = 
            super.writeDescriptor(parent, nodeName, serviceRef);

        appendTextChild(serviceRefNode, WebServicesTagNames.SERVICE_REF_NAME,
                        serviceRef.getName());

        ServiceRefPortInfoRuntimeNode portInfoRuntimeNode =
            new ServiceRefPortInfoRuntimeNode();

        Set portsInfo = serviceRef.getPortsInfo();
        for(Iterator iter = portsInfo.iterator(); iter.hasNext();) {
            ServiceRefPortInfo next = (ServiceRefPortInfo) iter.next();
            portInfoRuntimeNode.writeDescriptor
                (serviceRefNode, WebServicesTagNames.PORT_INFO, next);
        }

        NameValuePairNode nameValueNode = new NameValuePairNode();
        for(Iterator iter = serviceRef.getCallProperties().iterator();
            iter.hasNext();) {
            NameValuePairDescriptor next = (NameValuePairDescriptor)iter.next();
            nameValueNode.writeDescriptor
                (serviceRefNode, WebServicesTagNames.CALL_PROPERTY, next);
        }

        if( serviceRef.hasWsdlOverride() ) {
            URL wsdlOverride = serviceRef.getWsdlOverride();
            appendTextChild(serviceRefNode, WebServicesTagNames.WSDL_OVERRIDE,
                            wsdlOverride.toExternalForm());
        }

        appendTextChild(serviceRefNode, WebServicesTagNames.SERVICE_IMPL_CLASS,
                        serviceRef.getServiceImplClassName());

        if( serviceRef.hasServiceName() ) {
            Node serviceNameNode = appendChild
                (serviceRefNode, WebServicesTagNames.SERVICE_QNAME);
            QName serviceName = serviceRef.getServiceName();
            appendTextChild(serviceNameNode, 
                            WebServicesTagNames.NAMESPACE_URI,
                            serviceName.getNamespaceURI());
            appendTextChild(serviceNameNode,
                            WebServicesTagNames.LOCAL_PART,
                            serviceName.getLocalPart());
        }

        return serviceRefNode;
    
public static voidwriteServiceReferences(org.w3c.dom.Node parent, com.sun.enterprise.deployment.JndiNameEnvironment descriptor)
writes all the runtime information for service references

param
parent node to add the runtime xml info
param
the J2EE component containing service references

        Iterator serviceRefs = 
            descriptor.getServiceReferenceDescriptors().iterator();
        if (serviceRefs.hasNext()) {
            ServiceRefNode serviceRefNode = new ServiceRefNode();
            while (serviceRefs.hasNext()) {
                ServiceReferenceDescriptor next = 
                    (ServiceReferenceDescriptor) serviceRefs.next();
                // Only write runtime service-ref entry if there IS 
                // some runtime info...
                if( next.hasServiceImplClassName() ||
                    !next.getPortsInfo().isEmpty() ||
                    !next.getCallProperties().isEmpty() || 
                    next.hasWsdlOverride()) {
                    serviceRefNode.writeDescriptor
                        (parent, WebServicesTagNames.SERVICE_REF, next);
                }
            }
        }