Package org.jboss.wsf.framework.serviceref

Source Code of org.jboss.wsf.framework.serviceref.DefaultServiceRefMetaDataParser

/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.wsf.framework.serviceref;

// $Id: ServiceRefMetaDataParser.java 3959 2007-07-20 14:44:19Z heiko.braun@jboss.com $

import java.util.Iterator;

import javax.xml.namespace.QName;

import org.jboss.logging.Logger;
import org.jboss.wsf.common.DOMUtils;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.ServiceRefMetaDataParser;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedCallPropertyMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedInitParamMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedStubPropertyMetaData;
import org.jboss.xb.QNameBuilder;
import org.w3c.dom.Element;

/**
* The metdata data from service-ref element in web.xml, ejb-jar.xml, and
* application-client.xml.
*
* @author Thomas.Diesler@jboss.org
*/
public class DefaultServiceRefMetaDataParser implements ServiceRefMetaDataParser
{
   private static final Logger log = Logger.getLogger(DefaultServiceRefMetaDataParser.class);

   public void importStandardXml(Element root, UnifiedServiceRefMetaData sref)
   {
      sref.setServiceRefName(getElementContent(root, "service-ref-name"));
      sref.setServiceInterface(getOptionalElementContent(root, "service-interface"));
      sref.setWsdlFile(getOptionalElementContent(root, "wsdl-file"));
      sref.setMappingFile(getOptionalElementContent(root, "jaxrpc-mapping-file"));

      Element child = DOMUtils.getFirstChildElement(root, "service-qname");
      if (child != null)
         sref.setServiceQName(QNameBuilder.buildQName(child, getTextContent(child)));

      // Parse the port-component-ref elements
      Iterator iterator = DOMUtils.getChildElements(root, "port-component-ref");
      while (iterator.hasNext())
      {
         Element pcrefElement = (Element)iterator.next();
         UnifiedPortComponentRefMetaData pcrefMetaData = new UnifiedPortComponentRefMetaData(sref);
         pcrefMetaData.importStandardXml(pcrefElement);
         sref.addPortComponentRef(pcrefMetaData);
      }

      // Parse the handler elements
      iterator = DOMUtils.getChildElements(root, "handler");
      while (iterator.hasNext())
      {
         Element handlerElement = (Element)iterator.next();
         UnifiedHandlerMetaData handlerMetaData = new UnifiedHandlerMetaData();
         handlerMetaData.importStandardXml(handlerElement);
         sref.addHandler(handlerMetaData);
      }
   }

   public void importJBossXml(Element root, UnifiedServiceRefMetaData sref)
   {
      sref.setConfigName(getOptionalElementContent(root, "config-name"));
      sref.setConfigFile(getOptionalElementContent(root, "config-file"));
      sref.setWsdlOverride(getOptionalElementContent(root, "wsdl-override"));

      // Parse the port-component-ref elements
      Iterator iterator = DOMUtils.getChildElements(root, "port-component-ref");
      while (iterator.hasNext())
      {
         Element pcrefElement = (Element)iterator.next();
         String seiName = getOptionalElementContent(pcrefElement, "service-endpoint-interface");
         QName portName = getOptionalElementContentAsQName(pcrefElement, "port-qname");

         UnifiedPortComponentRefMetaData pcref = sref.getPortComponentRef(seiName, portName);
         if (pcref == null && seiName != null)
         {
            // Its ok to only have the <port-component-ref> in jboss.xml and not in ejb-jar.xml
            // if it has at least a SEI declared
            pcref = new UnifiedPortComponentRefMetaData(sref);
            pcref.importStandardXml(pcrefElement);
            sref.addPortComponentRef(pcref);
         }

         if (pcref != null)
            pcref.importJBossXml(pcrefElement);
      }

      // Parse the call-property elements
      iterator = DOMUtils.getChildElements(root, "call-property");
      while (iterator.hasNext())
      {
         Element propElement = (Element)iterator.next();
         String name = getElementContent(propElement, "prop-name");
         String value = getElementContent(propElement, "prop-value");
         sref.addCallProperty(new UnifiedCallPropertyMetaData(name, value));
      }
   }

   public void importStandardXml(Element root, UnifiedPortComponentRefMetaData pcref)
   {
      pcref.setServiceEndpointInterface(getOptionalElementContent(root, "service-endpoint-interface"));
      pcref.setPortComponentLink(getOptionalElementContent(root, "port-component-link"));
   }

   public void importJBossXml(Element root, UnifiedPortComponentRefMetaData pcref)
   {
      // Look for call-property elements
      Iterator iterator = DOMUtils.getChildElements(root, "call-property");
      while (iterator.hasNext())
      {
         Element propElement = (Element)iterator.next();
         String name = getElementContent(propElement, "prop-name");
         String value = getElementContent(propElement, "prop-value");
         pcref.addCallProperty(new UnifiedCallPropertyMetaData(name, value));
      }

      // Look for stub-property elements
      iterator = DOMUtils.getChildElements(root, "stub-property");
      while (iterator.hasNext())
      {
         Element propElement = (Element)iterator.next();
         String name = getElementContent(propElement, "prop-name");
         String value = getElementContent(propElement, "prop-value");
         UnifiedStubPropertyMetaData propMetaData = new UnifiedStubPropertyMetaData();
         propMetaData.setPropName(name);
         propMetaData.setPropValue(value);
         pcref.addStubProperty(propMetaData);
      }

      // portQName
      QName portQName = getOptionalElementContentAsQName(root, "port-qname");
      if (portQName != null)
         pcref.setPortQName(portQName);

      // config
      Element configName = DOMUtils.getFirstChildElement(root, "config-name");
      if (configName != null)
         pcref.setConfigName(getTextContent(configName));

      Element configFile = DOMUtils.getFirstChildElement(root, "config-file");
      if (configFile != null)
         pcref.setConfigFile(getTextContent(configFile));

      // service-endpoint-interface
      Element sei = DOMUtils.getFirstChildElement(root, "service-endpoint-interface");
      if (sei != null)
         pcref.setServiceEndpointInterface(getTextContent(sei));

   }

   public void importStandardXml(Element root, UnifiedHandlerMetaData href)
   {
      href.setHandlerName(getElementContent(root, "handler-name"));
      href.setHandlerClass(getElementContent(root, "handler-class"));

      // Parse the init-param elements
      Iterator iterator = DOMUtils.getChildElements(root, "init-param");
      while (iterator.hasNext())
      {
         Element paramElement = (Element)iterator.next();
         UnifiedInitParamMetaData param = new UnifiedInitParamMetaData();
         param.setParamName(getElementContent(paramElement, "param-name"));
         param.setParamValue(getElementContent(paramElement, "param-value"));
         href.addInitParam(param);
      }

      // Parse the soap-header elements
      iterator = DOMUtils.getChildElements(root, "soap-header");
      while (iterator.hasNext())
      {
         Element headerElement = (Element)iterator.next();
         String content = getTextContent(headerElement);
         QName qname = DOMUtils.resolveQName(headerElement, content);
         href.addSoapHeader(qname);
      }

      // Parse the soap-role elements
      iterator = DOMUtils.getChildElements(root, "soap-role");
      while (iterator.hasNext())
      {
         Element roleElement = (Element)iterator.next();
         String content = getTextContent(roleElement);
         href.addSoapRole(content);
      }

      // Parse the port-name elements
      iterator = DOMUtils.getChildElements(root, "port-name");
      while (iterator.hasNext())
      {
         Element portElement = (Element)iterator.next();
         String content = getTextContent(portElement);
         href.addPortName(content);
      }
   }

   private String getElementContent(Element element, String childName)
   {
      String childValue = getOptionalElementContent(element, childName);
      if (childValue == null || childValue.length() == 0)
         throw new IllegalStateException("Invalid null element content: " + childName);

      return childValue;
   }

   private String getOptionalElementContent(Element element, String childName)
   {
      return getTextContent(DOMUtils.getFirstChildElement(element, childName));
   }

   private QName getOptionalElementContentAsQName(Element element, String childName)
   {
      QName qname = null;
      String value = getOptionalElementContent(element, childName);
      if (value != null)
      {
         qname = (value.startsWith("{") ? QName.valueOf(value) : DOMUtils.resolveQName(element, value));
      }
      return qname;
   }

   private String getTextContent(Element element)
   {
      String content = null;
      if (element != null)
      {
         content = DOMUtils.getTextContent(element);
         if (content != null)
            content = content.trim();
      }
      return content;
   }
}
TOP

Related Classes of org.jboss.wsf.framework.serviceref.DefaultServiceRefMetaDataParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.