Package org.jboss.ws.extensions.addressing

Source Code of org.jboss.ws.extensions.addressing.AddressingPropertiesImpl

/*
* 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.ws.extensions.addressing;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.ws.addressing.AddressingBuilder;
import javax.xml.ws.addressing.AddressingConstants;
import javax.xml.ws.addressing.AddressingProperties;
import javax.xml.ws.addressing.AddressingType;
import javax.xml.ws.addressing.AttributedURI;
import javax.xml.ws.addressing.EndpointReference;
import javax.xml.ws.addressing.ReferenceParameters;
import javax.xml.ws.addressing.Relationship;

// $Id: AddressingPropertiesImpl.java 3534 2007-06-11 16:10:05Z heiko.braun@jboss.com $

/**
* Each instance is associated with a particular WS-Addressing schema whose
* namespace URI is returned by its <code>getAddressingVersion</code> method.
*  
* The namespace of each  key in the underlying map must match this URI and the
* local names of all the keys must be exactly the names of the Message Addressing Properties
* defined in that version of the WS-Addressing specification.
*
* Each value in the underlying type must be an instance of <code>AddressingType</code> whose
* WS-Addressing version (determined by its <code>getAddressingVersion</code>) method must
* match the WS-Addressing version associated with the <code>AddressingProperties</code>.
*
* TODO: verify that AddressingPropertiesImpl can extend ElementExtensibleImpl.
* See http://jira.jboss.com/jira/browse/JBWS-728
*
* @author Thomas.Diesler@jboss.org
* @since 14-Nov-2005
*/
public class AddressingPropertiesImpl extends ElementExtensibleImpl implements AddressingProperties
{
   private static AddressingConstants ADDR = new AddressingConstantsImpl();

   // A REQUIRED absolute URI representing the address of the intended receiver of this message.
   private AttributedURI to;
   // A REQUIRED absolute URI that uniquely identifies the semantics implied by this message.
   private AttributedURI action;
   // An OPTIONAL absolute URI that uniquely identifies the message.
   private AttributedURI messageId;
   // An OPTIONAL pair of values that indicate how this message relates to another message.
   private Relationship[] relatesTo;
   // An OPTIONAL endpoint reference for the intended receiver for replies to this message.
   private EndpointReference replyTo;
   // An OPTIONAL endpoint reference for the intended receiver for faults related to this message.
   private EndpointReference faultTo;
   // An OPTIONAL reference to the endpoint from which the message originated.
   private EndpointReference from;
   // Corresponds to the value of the [reference parameters] property of the endpoint reference to which the message is addressed.
   private ReferenceParameters refParams = new ReferenceParametersImpl();

   private Map<QName, AddressingType> addrTypes = new HashMap<QName, AddressingType>();

  private boolean initialized = false;
 
  public AttributedURI getTo()
   {
      return to;
   }

   public void setTo(AttributedURI to)
   {
      this.to = to;
   }

   public AttributedURI getAction()
   {
      return action;
   }

   public void setAction(AttributedURI action)
   {
      this.action = action;
   }

   public AttributedURI getMessageID()
   {
      return messageId;
   }

   public void setMessageID(AttributedURI iri)
   {
      this.messageId = iri;
   }

   public Relationship[] getRelatesTo()
   {
      return relatesTo;
   }

   public void setRelatesTo(Relationship[] relatesTo)
   {
      this.relatesTo = relatesTo;
   }

   public EndpointReference getReplyTo()
   {
      return replyTo;
   }

   public void setReplyTo(EndpointReference replyTo)
   {
      this.replyTo = replyTo;
   }

   public EndpointReference getFaultTo()
   {
      return faultTo;
   }

   public void setFaultTo(EndpointReference faultTo)
   {
      this.faultTo = faultTo;
   }

   public EndpointReference getFrom()
   {
      return from;
   }

   public void setFrom(EndpointReference from)
   {
      this.from = from;
   }

   public ReferenceParameters getReferenceParameters()
   {
      return refParams;
   }

   /**
    * Initializes the properties as a destination using the given
    * <code>EndpointReference</code>.  The <bold>To</bold> property is initialized
    * using the <bold>Address</bold> property of the <code>EndpointReference</code>
    * and the <bold>ReferenceParameters</bold> property is initialized using the
    * <bold>ReferenceParameters</bold> property of the <code>EndpointReference</code>.
    *
    * @param epr The <code>EndpointReference</code> representing the destination.
    */
   public void initializeAsDestination(EndpointReference epr)
   {
    if(initialized) return;
   
    if (epr == null)
         throw new IllegalArgumentException("Invalid null endpoint reference");

    this.to = epr.getAddress();
     
      ReferenceParameters srcParams = epr.getReferenceParameters();
      for (Object obj : srcParams.getElements())
      {
         SOAPElement soapElement = (SOAPElement)obj;
         soapElement.setAttributeNS(getNamespaceURI(), "wsa:IsReferenceParameter", "true");
         addElement(soapElement);
      }

    this.initialized = true;
  }

   /**
    * Initialize this <code>AddressingProperties</code> as a reply to the
    * given message.  As described in the WS-Addressing Core specification. 
    * The <bold>ReplyTo</bold> property is using the <bold>Address</bold>
    * property of the source <code>AddressingProperties</code> and the
    * <bold>ReferenceParameters</bold> property is initialized using the
    * <bold>ReferenceParameters</bold> property of the source message.
    *
    * @param  props The source <code>AddressingProperties</code>
    * @param isFault <code>true</code> if the reply is a Fault message.
    */
   public void initializeAsReply(AddressingProperties props, boolean isFault)
   {
    if(initialized) return;
   
    EndpointReference epr = (isFault ? props.getFaultTo() : null);
      if (epr == null)
      {
         epr = props.getReplyTo();
      }
      this.to = (epr != null ? epr.getAddress() : new AttributedURIImpl(ADDR.getAnonymousURI()));

      if (epr != null)
      {
         ReferenceParameters srcParams = epr.getReferenceParameters();
         for (Object obj : srcParams.getElements())
         {
            SOAPElement soapElement = (SOAPElement)obj;
            soapElement.setAttributeNS(getNamespaceURI(), "wsa:IsReferenceParameter", "true");
            addElement(soapElement);
         }
      }     
      if (props.getMessageID() != null)
      {
         AddressingBuilder builder = AddressingBuilder.getAddressingBuilder();
         Relationship rel = builder.newRelationship(props.getMessageID().getURI());
         this.relatesTo = new Relationship[] { rel };
      }

    this.initialized = true;
  }

   // Map interface ****************************************************************

   public int size()
   {
      return addrTypes.size();
   }

   public boolean isEmpty()
   {
      return addrTypes.isEmpty();
   }

   public boolean containsKey(Object arg0)
   {
      return addrTypes.containsKey(arg0);
   }

   public boolean containsValue(Object arg0)
   {
      return addrTypes.containsValue(arg0);
   }

   public AddressingType get(Object arg0)
   {
      return addrTypes.get(arg0);
   }

   public AddressingType put(QName arg0, AddressingType arg1)
   {
      return addrTypes.put(arg0, arg1);
   }

   public AddressingType remove(Object arg0)
   {
      return addrTypes.remove(arg0);
   }

   public void putAll(Map<? extends QName, ? extends AddressingType> arg0)
   {
      addrTypes.putAll(arg0);
   }

   public void clear()
   {
      addrTypes.clear();
   }

   public Set<QName> keySet()
   {
      return addrTypes.keySet();
   }

   public Collection<AddressingType> values()
   {
      return addrTypes.values();
   }

   public Set<Entry<QName, AddressingType>> entrySet()
   {
      return addrTypes.entrySet();
   }
}
TOP

Related Classes of org.jboss.ws.extensions.addressing.AddressingPropertiesImpl

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.