You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ga...@apache.org on 2004/06/22 07:00:19 UTC

cvs commit: ws-fx/addressing/src/org/apache/axis/message/addressing/util AddressingUtils.java

gawor       2004/06/21 22:00:19

  Modified:    addressing/src/org/apache/axis/message/addressing
                        Action.java AddressingHeaders.java
                        AttributedURI.java EndpointReference.java
                        FaultTo.java From.java MessageID.java
                        Recipient.java RelatesTo.java ReplyTo.java To.java
  Added:       addressing/src/org/apache/axis/message/addressing/util
                        AddressingUtils.java
  Log:
  fixed removal of duplicate headers. It now works for all WSA headers, does proper namespace checking, and supports actors
  
  Revision  Changes    Path
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/Action.java
  
  Index: Action.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/Action.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Action.java	13 May 2004 12:52:20 -0000	1.5
  +++ Action.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -56,9 +56,10 @@
           super(el);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.ACTION);
  +        return toSOAPHeaderElement(env, actorURI, Constants.ACTION);
       }
       
   }
  
  
  
  1.13      +16 -32    ws-fx/addressing/src/org/apache/axis/message/addressing/AddressingHeaders.java
  
  Index: AddressingHeaders.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/AddressingHeaders.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AddressingHeaders.java	19 Jun 2004 18:40:12 -0000	1.12
  +++ AddressingHeaders.java	22 Jun 2004 05:00:19 -0000	1.13
  @@ -345,61 +345,45 @@
           SOAPHeaderElement header = null;
           
           if (messageID != null) {
  -            header = messageID.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = messageID.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (to != null) {
  -            header = to.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = to.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (action != null) {
  -            header = action.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = action.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (from != null) {
  -            header = from.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = from.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (replyTo != null) {
  -            header = replyTo.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = replyTo.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (faultTo != null) {
  -            header = faultTo.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = faultTo.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (recipient != null) {
  -            header = recipient.toSOAPHeaderElement(env);
  -            header.setActor(actorURI);
  -            if (setMustUnderstand)
  -                header.setMustUnderstand(true);
  +            header = recipient.toSOAPHeaderElement(env, actorURI);
  +            header.setMustUnderstand(setMustUnderstand);
           }
   
           if (relatesTo != null) {
               for (int i = 0; i < relatesTo.size(); i++) {
                   RelatesTo rtp = (RelatesTo) relatesTo.get(i);
  -                header = rtp.toSOAPHeaderElement(env);
  -                header.setActor(actorURI);
  -                if (setMustUnderstand)
  -                    header.setMustUnderstand(true);
  +                header = rtp.toSOAPHeaderElement(env, actorURI);
  +                header.setMustUnderstand(setMustUnderstand);
               }
           }
           
  
  
  
  1.10      +10 -17    ws-fx/addressing/src/org/apache/axis/message/addressing/AttributedURI.java
  
  Index: AttributedURI.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/AttributedURI.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AttributedURI.java	18 Jun 2004 22:02:11 -0000	1.9
  +++ AttributedURI.java	22 Jun 2004 05:00:19 -0000	1.10
  @@ -18,6 +18,7 @@
   package org.apache.axis.message.addressing;
   
   import org.apache.axis.message.addressing.util.TextExtractor;
  +import org.apache.axis.message.addressing.util.AddressingUtils;
   
   import org.apache.axis.types.URI;
   
  @@ -77,35 +78,27 @@
       }
   
       protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                    String actorURI,
                                                       String name) 
           throws Exception {
  +        if (name == null) {
  +            throw new IllegalArgumentException();
  +        }
           Name nm = env.createName(name, 
                                    Constants.NS_PREFIX_ADDRESSING,
                                    Constants.NS_URI_ADDRESSING);
           SOAPHeader header = env.getHeader();
  +        if (header == null) {
  +            header = env.addHeader();
  +        }
   
           // remove the header elements of this name if they
           // already exist
  -        Iterator headers = header.getChildElements();
  -        List existingElements = new ArrayList();
  -        while (headers.hasNext())
  -        {
  -                SOAPHeaderElement hElement = (SOAPHeaderElement) headers.next();
  -                if (hElement.getLocalName().equals(name))
  -                {
  -                        existingElements.add(hElement);
  -                }
  -                
  -        }
  -        for (int i = 0; i < existingElements.size(); i++)
  -        {
  -                SOAPHeaderElement el = (SOAPHeaderElement) existingElements.get(i);
  -                el.detachNode();
  -        }
  -
  +        AddressingUtils.removeHeader(header, actorURI, name);
           
           // add the new header element
           SOAPHeaderElement headerElement = header.addHeaderElement(nm);
  +        headerElement.setActor(actorURI);
           headerElement.addTextNode(toString());
           return headerElement;
       }
  
  
  
  1.13      +22 -6     ws-fx/addressing/src/org/apache/axis/message/addressing/EndpointReference.java
  
  Index: EndpointReference.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/EndpointReference.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- EndpointReference.java	18 Jun 2004 22:02:11 -0000	1.12
  +++ EndpointReference.java	22 Jun 2004 05:00:19 -0000	1.13
  @@ -18,6 +18,7 @@
   package org.apache.axis.message.addressing;
   
   import org.apache.axis.message.addressing.util.TextExtractor;
  +import org.apache.axis.message.addressing.util.AddressingUtils;
   
   import org.apache.axis.types.URI;
   import org.apache.axis.utils.XMLUtils;
  @@ -35,6 +36,7 @@
   import javax.xml.soap.SOAPElement;
   import javax.xml.soap.SOAPEnvelope;
   import javax.xml.soap.SOAPHeaderElement;
  +import javax.xml.soap.SOAPHeader;
   import javax.xml.parsers.ParserConfigurationException;
   
   /**
  @@ -230,26 +232,40 @@
           return toDOM(doc, new QName(Constants.NS_URI_ADDRESSING, name));
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI)
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.ENDPOINT_REFERENCE);
  +        return toSOAPHeaderElement(env, actorURI, 
  +                                   Constants.ENDPOINT_REFERENCE);
       }
   
       protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                    String actorURI,
                                                       String name)
           throws Exception {
  -
  +        if (name == null) {
  +            throw new IllegalArgumentException();
  +        }
           if (!(env instanceof org.apache.axis.message.SOAPEnvelope)) {
               throw new Exception("Not supported");
           }
   
  +        SOAPHeader header = env.getHeader();
  +        if (header == null) {
  +            header = env.addHeader();
  +        }
  +        // remove the header elements of this name if they
  +        // already exist
  +        AddressingUtils.removeHeader(header, actorURI, name);
  +
           Document doc = XMLUtils.newDocument();
   
  -        org.apache.axis.message.SOAPHeaderElement header =
  +        org.apache.axis.message.SOAPHeaderElement headerElem =
               new org.apache.axis.message.SOAPHeaderElement(toDOM(doc, name));
  -        ((org.apache.axis.message.SOAPEnvelope)env).addHeader(header);
  +        headerElem.setActor(actorURI);
  +        ((org.apache.axis.message.SOAPEnvelope)env).addHeader(headerElem);
   
  -        return header;
  +        return headerElem;
       }
   
   }
  
  
  
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/FaultTo.java
  
  Index: FaultTo.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/FaultTo.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FaultTo.java	13 May 2004 12:52:20 -0000	1.5
  +++ FaultTo.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -74,9 +74,10 @@
           super(element);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.FAULT_TO);
  +        return toSOAPHeaderElement(env, actorURI, Constants.FAULT_TO);
       }
   
       /**
  
  
  
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/From.java
  
  Index: From.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/From.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- From.java	13 May 2004 12:52:20 -0000	1.5
  +++ From.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -74,9 +74,10 @@
           super(element);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.FROM);
  +        return toSOAPHeaderElement(env, actorURI, Constants.FROM);
       }
   
       /**
  
  
  
  1.7       +4 -3      ws-fx/addressing/src/org/apache/axis/message/addressing/MessageID.java
  
  Index: MessageID.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/MessageID.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- MessageID.java	13 May 2004 12:52:20 -0000	1.6
  +++ MessageID.java	22 Jun 2004 05:00:19 -0000	1.7
  @@ -59,11 +59,12 @@
           super(el);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env, 
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.MESSAGE_ID);
  +        return toSOAPHeaderElement(env, actorURI, Constants.MESSAGE_ID);
       }
  -
  +    
   }
   
   
  
  
  
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/Recipient.java
  
  Index: Recipient.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/Recipient.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Recipient.java	13 May 2004 12:52:20 -0000	1.5
  +++ Recipient.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -65,9 +65,10 @@
           super(element);
       }
       
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.RECIPIENT);
  +        return toSOAPHeaderElement(env, actorURI, Constants.RECIPIENT);
       }
   
       /**
  
  
  
  1.8       +14 -2     ws-fx/addressing/src/org/apache/axis/message/addressing/RelatesTo.java
  
  Index: RelatesTo.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/RelatesTo.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- RelatesTo.java	13 May 2004 12:52:20 -0000	1.7
  +++ RelatesTo.java	22 Jun 2004 05:00:19 -0000	1.8
  @@ -19,6 +19,7 @@
   
   import org.apache.axis.message.SOAPHeaderElement;
   import org.apache.axis.message.addressing.util.TextExtractor;
  +import org.apache.axis.message.addressing.util.AddressingUtils;
   import org.apache.axis.types.URI;
   
   import javax.xml.namespace.QName;
  @@ -97,13 +98,24 @@
           }
   }
   
  -    protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
  +    protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                    String actorURI)
           throws Exception {
           Name nm = env.createName(Constants.RELATES_TO,
                                    Constants.NS_PREFIX_ADDRESSING,
                                    Constants.NS_URI_ADDRESSING);
           SOAPHeader header = env.getHeader();
  -        SOAPHeaderElement headerElement = (SOAPHeaderElement)header.addHeaderElement(nm);
  +        if (header == null) {
  +            header = env.addHeader();
  +        }
  +
  +        // remove the header elements of this name if they
  +        // already exist
  +        AddressingUtils.removeHeader(header, actorURI, Constants.RELATES_TO);
  +
  +        SOAPHeaderElement headerElement = 
  +            (SOAPHeaderElement)header.addHeaderElement(nm);
  +        headerElement.setActor(actorURI);
   
           QName type = getType();
   
  
  
  
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/ReplyTo.java
  
  Index: ReplyTo.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/ReplyTo.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ReplyTo.java	13 May 2004 12:52:20 -0000	1.5
  +++ ReplyTo.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -74,9 +74,10 @@
           super(element);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.REPLY_TO);
  +        return toSOAPHeaderElement(env, actorURI, Constants.REPLY_TO);
       }
   
       /**
  
  
  
  1.6       +3 -2      ws-fx/addressing/src/org/apache/axis/message/addressing/To.java
  
  Index: To.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/To.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- To.java	13 May 2004 12:52:20 -0000	1.5
  +++ To.java	22 Jun 2004 05:00:19 -0000	1.6
  @@ -73,9 +73,10 @@
           super(el);
       }
   
  -    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env) 
  +    public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
  +                                                 String actorURI) 
           throws Exception {
  -        return toSOAPHeaderElement(env, Constants.TO);
  +        return toSOAPHeaderElement(env, actorURI, Constants.TO);
       }
       
       
  
  
  
  1.1                  ws-fx/addressing/src/org/apache/axis/message/addressing/util/AddressingUtils.java
  
  Index: AddressingUtils.java
  ===================================================================
  /*
   * Copyright  1999-2004 The Apache Software Foundation.
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  
  package org.apache.axis.message.addressing.util;
  
  import org.apache.axis.message.addressing.Constants;
  
  import java.util.Iterator;
  import java.util.List;
  import java.util.ArrayList;
  
  import javax.xml.soap.Name;
  import javax.xml.soap.SOAPHeader;
  import javax.xml.soap.SOAPHeaderElement;
  
  /**
   * Class AddressingUtils
   * 
   * @author Jarek Gawor (gawor@apache.org)
   */
  public class AddressingUtils {
      
      public static void removeHeader(SOAPHeader soapHeader, 
                                      String actorURI,
                                      String headerName) {
          if (soapHeader == null) {
              return;
          }
          Iterator headers = soapHeader.examineHeaderElements(actorURI);
          List existingElements = new ArrayList();
          while (headers.hasNext()) {
              SOAPHeaderElement hElement = (SOAPHeaderElement) headers.next();
              Name hName = hElement.getElementName();
              if (Constants.NS_URI_ADDRESSING.equals(hName.getURI()) &&
                  hName.getLocalName().equals(headerName)) {
                  existingElements.add(hElement);
              }
          }
          for (int i = 0; i < existingElements.size(); i++) {
              SOAPHeaderElement el = (SOAPHeaderElement) existingElements.get(i);
              el.detachNode();
          }
      }
  
  }