All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jbi.wsdl2.impl.MessageReferenceImpl Maven / Gradle / Ivy

There is a newer version: 2.4.3
Show newest version
/*
 * BEGIN_HEADER - DO NOT EDIT
 *
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the "License").  You may not use this file except
 * in compliance with the License.
 *
 * You can obtain a copy of the license at
 * https://open-esb.dev.java.net/public/CDDLv1.0.html.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * HEADER in each file and include the License file at
 * https://open-esb.dev.java.net/public/CDDLv1.0.html.
 * If applicable add the following below this CDDL HEADER,
 * with the fields enclosed by brackets "[]" replaced with
 * your own identifying information: Portions Copyright
 * [year] [name of copyright owner]
 */

/*
 * @(#)MessageReferenceImpl.java
 * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
 *
 * END_HEADER - DO NOT EDIT
 */
package com.sun.jbi.wsdl2.impl;

import com.sun.jbi.wsdl2.Direction;
import com.sun.jbi.wsdl2.MessageContentModel;

import java.util.Map;

import javax.xml.namespace.QName;

import org.apache.xmlbeans.XmlCursor;

import org.w3.ns.wsdl.MessageRefType;

/**
 * Implementation of WSDL 2.0 Message Reference Component.
 * 
 * @author Sun Microsystems, Inc.
 */
final class MessageReferenceImpl extends MessageReference
{
    /** The container for this component */
    private DescriptionImpl   mContainer;
  
    /**
     * Get the container for this component.
     * 
     * @return The component for this component
     */
    protected DescriptionImpl getContainer()
    {
        return this.mContainer;
    }
  
    /**
     * Construct a message reference implementation object from the given XML
     * bean.
     * @param bean The Message Reference XML bean to use to construct this
     *             component.
     * @param defs The container for this component
     */
    private MessageReferenceImpl(MessageRefType bean, DescriptionImpl defs)
    {
        super(bean);
        this.mContainer = defs;
    }
  
    /** Map of WSDL-defined attribute QNames. Keyed by QName.toString value */
    private static java.util.Map sWsdlAttributeQNames = null;

    /** 
     * Worker class method for {@link #getWsdlAttributeNameMap()}.
     * 
     * @return Map of WSDL-defined attribute QNames for this component, 
     *         indexed by QName.toString()
     */
    static synchronized java.util.Map getAttributeNameMap()
    {
        if (sWsdlAttributeQNames == null)
        {
            sWsdlAttributeQNames = XmlBeansUtil.getAttributesMap(
                MessageRefType.type);
        }

        return sWsdlAttributeQNames;
    }
  
    /**
     * Get map of WSDL-defined attribute QNames for this component, indexed by 
     * canonical QName string (see {@link javax.xml.namespace.QName#toString()}.
     *
     * @return Map of WSDL-defined attribute QNames for this component, 
     *         indexed by QName.toString()
     */
    public java.util.Map getWsdlAttributeNameMap()
    {
        return getAttributeNameMap();
    }
  
    /**
     * Get message exchange pattern role identifier.
     *
     * @return Message exchange pattern role identifier
     */
    public String getMessageLabel()
    {
        return getBean().getMessageLabel();
    }

    /**
     * Set message exchange pattern role identifier.
     *
     * @param theMessageLabel Message exchange pattern role identifier
     */
    public void setMessageLabel(String theMessageLabel)
    {
        if (theMessageLabel != null)
        {
            getBean().setMessageLabel(theMessageLabel);
        }
        else
        {
            getBean().unsetMessageLabel();
        }

        return;
    }

    /**
     * Get content or payload element type declaration.
     *
     * @return Content or payload element type declaration
     */
    public Object getElement()
    {
        return getBean().getElement();
    }

    /**
     * Set content or payload element type declaration.
     *
     * @param theElement Content or payload element type declaration
     */
    public void setElement(Object theElement)
    {
        if (theElement != null && 
            (theElement instanceof QName || theElement instanceof String))
        {
            getBean().setElement(theElement);
        }
    }

    /**
     * Get direction of this message in the exchange.
     *
     * @return Direction of this message in the exchange
     */
    public Direction getDirection()
    {
        XmlCursor     cursor   = getBean().newCursor();
        QName         name     = cursor.getName();

        cursor.dispose();

        return INPUT.equals(name.getLocalPart()) ? Direction.IN : Direction.OUT;
    }

    /**
     * Get content model type: #ANY, #NONE, or #ELEMENT.
     *
     * @return Content model type: #ANY, #NONE, or #ELEMENT
     */
    public MessageContentModel getMessageContentModel()
    {
        MessageContentModel result  = MessageContentModel.NONE;
        Object              element = getBean().getElement();

        if (element != null)
        {
            if (element instanceof QName)
            {
                result = MessageContentModel.ELEMENT;
            }

            //assert (element instanceof String);
            result = MessageContentModel.ANY;
        }

        return result;
    }

    /** WSDL element local name for an input message */
    private static final String INPUT  = "input";

    /** WSDL element local name for an output message */
    private static final String OUTPUT = "output";

    /**
     * Set direction of this message in the exchange.
     * 

* Direction is encoded in name of the XML element representing this component. * * @param theDirection Direction of this message in the exchange */ public void setDirection(Direction theDirection) { XmlCursor cursor = getBean().newCursor(); QName name = cursor.getName(); QName newName = new QName(name.getNamespaceURI(), theDirection == Direction.IN ? INPUT : OUTPUT); cursor.setName(newName); cursor.dispose(); } /** * A factory class for creating / finding components for given XML beans. *

* This factory guarantees that there will only be one component for each * XML bean instance. */ static final class Factory { /** * Find the WSDL message reference component associated with the given * XML bean, creating a new component if necessary. *

* This is thread-safe.

* * @param bean The XML bean to find the component for. * @param defs The container for the component. * @return The WSDL message reference component for the given * bean (null if the bean is null). */ static MessageReferenceImpl getInstance( MessageRefType bean, DescriptionImpl defs) { MessageReferenceImpl result; if (bean != null) { Map map = defs.getMessageReferenceMap(); synchronized (map) { result = (MessageReferenceImpl) map.get(bean); if (result == null) { result = new MessageReferenceImpl(bean, defs); map.put(bean, result); } } } else { result = null; } return result; } } // end inner class Factory } // End-of-file: MessageReferenceImpl.java





© 2015 - 2025 Weber Informatics LLC | Privacy Policy