Package org.jboss.ws.core.jaxws.handler

Source Code of org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS

/*
* 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.core.jaxws.handler;

// $Id: MessageContextImpl.java 275 2006-05-04 21:36:29Z jason.greene@jboss.com $

import java.net.URI;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.handler.soap.SOAPMessageContext;

import org.jboss.ws.core.CommonMessageContext;

/**
* The interface SOAPMessageContext provides access to the SOAP message for either RPC request or response.
* The javax.xml.soap.SOAPMessage specifies the standard Java API for the representation of a SOAP 1.1 message with attachments.
*
* @author Thomas.Diesler@jboss.org
* @since 25-Jul-2006
*/
public class SOAPMessageContextJAXWS extends MessageContextJAXWS implements SOAPMessageContext
{
   // The SOAP actor roles
   private Set<String> roles = new HashSet<String>();

   /** Default ctor */
   public SOAPMessageContextJAXWS()
   {
   }

   public SOAPMessageContextJAXWS(CommonMessageContext msgContext)
   {
      super(msgContext);     
   }

   /**
    * Gets the SOAPMessage from this message context.
    * Modifications to the returned SOAPMessage change the message in-place, there is no need to susequently call setMessage.
    */
   public SOAPMessage getMessage()
   {
      return getSOAPMessage();
   }

   /**
    * Sets the SOAPMessage in this message context
    */
   public void setMessage(SOAPMessage soapMessage)
   {
      setSOAPMessage(soapMessage);
   }

   /**
    * Gets headers that have a particular qualified name from the message in the message context.
    * Note that a SOAP message can contain multiple headers with the same qualified name.
    */
   public Object[] getHeaders(QName qname, JAXBContext context, boolean allRoles)
   {
      List<Object> headers = new ArrayList<Object>();

      if (getSOAPMessage() != null)
      {
         try
         {
            SOAPHeader soapHeader = getSOAPMessage().getSOAPHeader();
            Iterator<SOAPHeaderElement> headerElements = soapHeader.examineAllHeaderElements();
            while (headerElements.hasNext())
            {
               SOAPHeaderElement hElement = headerElements.next();
               Name hName = hElement.getElementName();
               if (qname.equals(new QName(hName.getURI(), hName.getLocalName())))
               {
                  URI actor = new URI(hElement.getActor());
                  if (roles.contains(actor) || allRoles)
                  {
                     headers.add(hElement);

                     // FIXME
                     // SOAPMessageContext.getHeaders should return unmarshalled objects
                     // http://jira.jboss.org/jira/browse/JBWS-1105
                  }
               }
            }
         }
         catch (RuntimeException rte)
         {
            throw rte;
         }
         catch (Exception ex)
         {
            throw new WebServiceException("Cannot get headers", ex);
         }
      }

      Object[] arr = new Object[headers.size()];
      headers.toArray(arr);
      return arr;
   }

   /**
    * Gets the SOAP actor roles associated with an execution of the handler chain.
    * Note that SOAP actor roles apply to the SOAP node and are managed using SOAPBinding.setRoles and SOAPBinding.getRoles.
    * Handler instances in the handler chain use this information about the SOAP actor roles to process the SOAP header blocks.
    * Note that the SOAP actor roles are invariant during the processing of SOAP message through the handler chain.
    */
   public Set<String> getRoles()
   {
      return roles;
   }
}
TOP

Related Classes of org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS

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.