[jboss-cvs] JBossAS SVN: r61157 - branches/tdiesler/trunk/server/src/main/org/jboss/metadata/serviceref.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Mar 6 15:48:07 EST 2007


Author: thomas.diesler at jboss.com
Date: 2007-03-06 15:48:07 -0500 (Tue, 06 Mar 2007)
New Revision: 61157

Modified:
   branches/tdiesler/trunk/server/src/main/org/jboss/metadata/serviceref/ServiceRefMetaData.java
Log:
partial commit

Modified: branches/tdiesler/trunk/server/src/main/org/jboss/metadata/serviceref/ServiceRefMetaData.java
===================================================================
--- branches/tdiesler/trunk/server/src/main/org/jboss/metadata/serviceref/ServiceRefMetaData.java	2007-03-06 20:44:01 UTC (rev 61156)
+++ branches/tdiesler/trunk/server/src/main/org/jboss/metadata/serviceref/ServiceRefMetaData.java	2007-03-06 20:48:07 UTC (rev 61157)
@@ -27,6 +27,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,7 +39,9 @@
 import org.dom4j.DocumentHelper;
 import org.dom4j.Element;
 import org.jboss.logging.Logger;
+import org.jboss.metadata.MetaData;
 import org.jboss.metadata.Ref;
+import org.jboss.xb.QNameBuilder;
 
 /**
  * The metdata data from service-ref element in web.xml, ejb-jar.xml, and
@@ -54,44 +57,33 @@
 
    // The required <service-ref-name> element
    private String serviceRefName;
-
    // The required <service-interface> element
    private String serviceInterface;
-
    // service-res-type
    private String serviceRefType;
-
    // The optional <wsdl-file> element
    private String wsdlFile;
-
    // The optional <jaxrpc-mapping-file> element
    private String mappingFile;
-
    // The optional <service-qname> element
    private QName serviceQName;
-
-   // The LinkedHashMap<String, PortComponentRefMetaData> for
-   // <port-component-ref> elements
+   // The LinkedHashMap<String, PortComponentRefMetaData> for <port-component-ref> elements
    private Map<String, PortComponentRefMetaData> portComponentRefs = new LinkedHashMap<String, PortComponentRefMetaData>();
-
-   // The optional <handler> elements
+   // The optional <handler> elements. JAX-RPC handlers declared in the standard J2EE1.4 descriptor
    private List<HandlerMetaData> handlers = new ArrayList<HandlerMetaData>();
-
-   // The optional <handler-chains> elements
+   // The optional <handler-chains> elements. JAX-WS handlers declared in the standard JavaEE5 descriptor
    private HandlerChainsMetaData handlerChains;
-
+   // The optional <handler-chain> element. JAX-WS handler chain declared in the JBoss JavaEE5 descriptor
+   private String handlerChain;
    // The optional JBossWS config-name
    private String configName;
-
    // The optional JBossWS config-file
    private String configFile;
-
-   /** The URL of the actual WSDL to use, <wsdl-override> */
+   // The optional URL of the actual WSDL to use, <wsdl-override> 
    private URL wsdlOverride;
+   // Arbitrary proxy properties given by <call-property> 
+   private List<CallPropertyMetaData> callProperties = new ArrayList<CallPropertyMetaData>();
 
-   /** Arbitrary proxy properties given by <call-property> */
-   private Properties callProperties;
-
    /**
     * Default constructor, used when unmarshalling on the client side
     */
@@ -101,6 +93,7 @@
 
    public void merge(ServiceRefMetaData sourceRef)
    {
+      handlerChain = sourceRef.getHandlerChain();
       configName = sourceRef.configName;
       configFile = sourceRef.configFile;
       wsdlOverride = sourceRef.wsdlOverride;
@@ -123,7 +116,9 @@
             pcTargetRef = pcSourceRef;
          }
 
+         pcTargetRef.setPortQName(pcSourceRef.getPortQName());
          pcTargetRef.setCallProperties(pcSourceRef.getCallProperties());
+         pcTargetRef.setStubProperties(pcSourceRef.getStubProperties());
       }
    }
 
@@ -252,11 +247,21 @@
       }
    }
 
-   public Properties getCallProperties()
+   public List<CallPropertyMetaData> getCallProperties()
    {
       return callProperties;
    }
 
+   public void setCallProperties(List<CallPropertyMetaData> callProps)
+   {
+      callProperties = callProps;
+   }
+
+   public void addCallProperty(CallPropertyMetaData callProp)
+   {
+      callProperties.add(callProp);
+   }
+
    public HandlerChainsMetaData getHandlerChains()
    {
       return handlerChains;
@@ -266,13 +271,135 @@
    {
       this.handlerChains = handlerChains;
    }
+   
+   public String getHandlerChain()
+   {
+      return handlerChain;
+   }
 
+   public void setHandlerChain(String handlerChain)
+   {
+      this.handlerChain = handlerChain;
+   }
+
+   /** @deprecated */
+   public void importStandardXml(org.w3c.dom.Element element)
+   {
+      serviceRefName = MetaData.getUniqueChildContent(element, "service-ref-name");
+
+      serviceInterface = MetaData.getUniqueChildContent(element, "service-interface");
+
+      wsdlFile = MetaData.getOptionalChildContent(element, "wsdl-file");
+
+      mappingFile = MetaData.getOptionalChildContent(element, "jaxrpc-mapping-file");
+
+      org.w3c.dom.Element qnameElement = MetaData.getOptionalChild(element, "service-qname");
+      if (qnameElement != null)
+         serviceQName = QNameBuilder.buildQName(qnameElement, MetaData.getElementContent(qnameElement));
+
+      // Parse the port-component-ref elements
+      Iterator iterator = MetaData.getChildrenByTagName(element, "port-component-ref");
+      while (iterator.hasNext())
+      {
+         org.w3c.dom.Element pcrefElement = (org.w3c.dom.Element)iterator.next();
+         PortComponentRefMetaData pcrefMetaData = new PortComponentRefMetaData(this);
+         pcrefMetaData.importStandardXml(pcrefElement);
+         portComponentRefs.put(pcrefMetaData.getServiceEndpointInterface(), pcrefMetaData);
+      }
+
+      // Parse the handler elements
+      iterator = MetaData.getChildrenByTagName(element, "handler");
+      while (iterator.hasNext())
+      {
+         org.w3c.dom.Element handlerElement = (org.w3c.dom.Element)iterator.next();
+         HandlerMetaData handlerMetaData = new HandlerMetaData();
+         handlerMetaData.importStandardXml(handlerElement);
+         handlers.add(handlerMetaData);
+      }
+   }
+
+   /** @deprecated */
+   public void importJBossXml(org.w3c.dom.Element element)
+   {
+      configName = MetaData.getOptionalChildContent(element, "config-name");
+
+      configFile = MetaData.getOptionalChildContent(element, "config-file");
+      String wsdlOverrideOption = MetaData.getOptionalChildContent(element, "wsdl-override");
+      try
+      {
+         if (wsdlOverrideOption != null)
+            wsdlOverride = new URL(wsdlOverrideOption);
+      }
+      catch (MalformedURLException e)
+      {
+         throw new IllegalStateException("Invalid WSDL override: " + wsdlOverrideOption);
+      }
+
+      // Parse the port-component-ref elements
+      Iterator iterator = MetaData.getChildrenByTagName(element, "port-component-ref");
+      while (iterator.hasNext())
+      {
+         org.w3c.dom.Element pcrefElement = (org.w3c.dom.Element)iterator.next();
+         String name = MetaData.getOptionalChildContent(pcrefElement, "service-endpoint-interface");
+         if (name != null)
+         {
+            PortComponentRefMetaData pcrefMetaData = (PortComponentRefMetaData)portComponentRefs.get(name);
+            if (pcrefMetaData == null)
+            {
+               // Its ok to only have the <port-component-ref> in jboss.xml and not in ejb-jar.xml
+               pcrefMetaData = new PortComponentRefMetaData(this);
+               pcrefMetaData.importStandardXml(pcrefElement);
+               portComponentRefs.put(pcrefMetaData.getServiceEndpointInterface(), pcrefMetaData);
+            }
+
+            pcrefMetaData.importJBossXml(pcrefElement);
+         }
+      }
+
+      // Parse the call-property elements
+      iterator = MetaData.getChildrenByTagName(element, "call-property");
+      while (iterator.hasNext())
+      {
+         org.w3c.dom.Element propElement = (org.w3c.dom.Element)iterator.next();
+         String name = MetaData.getUniqueChildContent(propElement, "prop-name");
+         String value = MetaData.getUniqueChildContent(propElement, "prop-value");
+         callProperties.add(new CallPropertyMetaData(name, value));
+      }
+   }
+   
+   public static boolean isJ2EE14Descriptor(org.w3c.dom.Element element)
+   {
+      // Verify J2EE-1.4
+      String nsURI = element.getOwnerDocument().getDocumentElement().getNamespaceURI();
+      boolean isValid = "http://java.sun.com/xml/ns/j2ee".equals(nsURI);
+
+      // Verify JBoss-4.0
+      org.w3c.dom.DocumentType doctype = element.getOwnerDocument().getDoctype();
+      if (isValid == false && doctype != null)
+      {
+         String publicId = doctype.getPublicId();
+         isValid |= "-//JBoss//DTD JBOSS 4.0//EN".equals(publicId);
+         isValid |= "-//JBoss//DTD JBOSS 4.2//EN".equals(publicId);
+         isValid |= "-//JBoss//DTD Web Application 2.4//EN".equals(publicId);
+         isValid |= "-//JBoss//DTD Application Client 4.0//EN".equals(publicId);
+         isValid |= "-//JBoss//DTD Application Client 4.2//EN".equals(publicId);
+      }
+
+      if (isValid == false)
+      {
+         String dtstr = (doctype != null ? "[public=" + doctype.getPublicId() + ",system=" + doctype.getSystemId() + "]" : null);
+         log.debug("Skip <service-ref> for: nsURI=" + nsURI + ",doctype=" + dtstr);
+      }
+      return isValid;
+   }
+   
    public String toXMLFragmet()
    {
       Document document = DocumentHelper.createDocument();
       Element root = document.addElement("service-ref");
       root.addElement("service-ref-name").addText(serviceRefName);
-      root.addElement("service-interface").addText(serviceInterface);
+      if (serviceInterface != null)
+         root.addElement("service-interface").addText(serviceInterface);
       if (serviceRefType != null)
          root.addElement("service-ref-type").addText(serviceRefType);
       if (wsdlFile != null)
@@ -287,6 +414,22 @@
          root.add(handler.toXMLFragment());
       if (handlerChains != null)
          root.add(handlerChains.toXMLFragment());
+      
+      for (CallPropertyMetaData prop : getCallProperties())
+      {
+         Element propEl = root.addElement("call-property");
+         propEl.addElement("prop-name").addText(prop.getPropName());
+         propEl.addElement("prop-value").addText(prop.getPropValue());
+      }
+      
+      if (configName != null)
+         root.addElement("config-name").addText(configName);
+      if (configFile != null)
+         root.addElement("config-file").addText(configFile);
+      if (handlerChain != null)
+         root.addElement("handler-chain").addText(handlerChain);
+      if (wsdlOverride != null)
+         root.addElement("wsdl-override").addText(wsdlOverride.toExternalForm());
       return root.asXML();
    }
 }




More information about the jboss-cvs-commits mailing list