< prev index next >

jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/ws/api/message/saaj/SAAJMessageHeaders.java

Print this page


   1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.xml.internal.ws.api.message.saaj;
  27 
  28 import java.util.ArrayList;
  29 import java.util.Collections;
  30 import java.util.HashMap;
  31 import java.util.HashSet;
  32 import java.util.Iterator;
  33 import java.util.List;
  34 import java.util.Map;
  35 import java.util.Set;
  36 
  37 import javax.xml.namespace.QName;
  38 import javax.xml.soap.SOAPException;
  39 import javax.xml.soap.SOAPHeader;
  40 import javax.xml.soap.SOAPHeaderElement;
  41 import javax.xml.soap.SOAPMessage;
  42 


  43 import com.sun.xml.internal.ws.api.SOAPVersion;
  44 import com.sun.xml.internal.ws.api.WSBinding;
  45 import com.sun.xml.internal.ws.api.message.Header;
  46 import com.sun.xml.internal.ws.api.message.MessageHeaders;
  47 import com.sun.xml.internal.ws.binding.SOAPBindingImpl;
  48 import com.sun.xml.internal.ws.message.saaj.SAAJHeader;
  49 
  50 public class SAAJMessageHeaders implements MessageHeaders {
  51     SOAPMessage sm;
  52     Map<SOAPHeaderElement, Header> nonSAAJHeaders;
  53     Map<QName, Integer> notUnderstoodCount;
  54     SOAPVersion soapVersion;
  55     private Set<QName> understoodHeaders;
  56 
  57     public SAAJMessageHeaders(SOAPMessage sm, SOAPVersion version) {
  58         this.sm = sm;
  59         this.soapVersion = version;
  60         initHeaderUnderstanding();
  61     }
  62 


 217         if (isNonSAAJHeader(header)) {
 218             //TODO assumes only one header with that name?
 219             addNonSAAJHeader(find(header.getNamespaceURI(), header.getLocalPart()),
 220                     header);
 221         }
 222 
 223         return true;
 224     }
 225 
 226     @Override
 227     public Header remove(QName name) {
 228         return remove(name.getNamespaceURI(), name.getLocalPart());
 229     }
 230 
 231     @Override
 232     public Header remove(String nsUri, String localName) {
 233         SOAPHeader soapHeader = ensureSOAPHeader();
 234         if (soapHeader == null) {
 235             return null;
 236         }

 237         SOAPHeaderElement headerElem = find(nsUri, localName);
 238         if (headerElem == null) {
 239             return null;
 240         }
 241         headerElem = (SOAPHeaderElement) soapHeader.removeChild(headerElem);
 242 
 243         //it might have been a nonSAAJHeader - remove from that map
 244         removeNonSAAJHeader(headerElem);
 245 
 246         //remove it from understoodHeaders and notUnderstoodHeaders if present
 247         QName hdrName = (nsUri == null) ? new QName(localName) : new QName(nsUri, localName);
 248         if (understoodHeaders != null) {
 249             understoodHeaders.remove(hdrName);
 250         }
 251         removeNotUnderstood(hdrName);
 252 
 253         return new SAAJHeader(headerElem);
 254     }
 255 
 256     private void removeNotUnderstood(QName hdrName) {
 257         if (notUnderstoodCount == null) {
 258             return;
 259         }
 260         Integer notUnderstood = notUnderstoodCount.get(hdrName);
 261         if (notUnderstood != null) {


 313     private SOAPHeader ensureSOAPHeader() {
 314         SOAPHeader header;
 315         try {
 316             header = sm.getSOAPPart().getEnvelope().getHeader();
 317             if (header != null) {
 318                 return header;
 319             } else {
 320                 return sm.getSOAPPart().getEnvelope().addHeader();
 321             }
 322         } catch (Exception e) {
 323             return null;
 324         }
 325     }
 326 
 327     private boolean isNonSAAJHeader(Header header) {
 328         return !(header instanceof SAAJHeader);
 329     }
 330 
 331     private void addNonSAAJHeader(SOAPHeaderElement headerElem, Header header) {
 332         if (nonSAAJHeaders == null) {
 333             nonSAAJHeaders = new HashMap<SOAPHeaderElement, Header>();
 334         }
 335         nonSAAJHeaders.put(headerElem, header);
 336     }
 337 
 338     private void removeNonSAAJHeader(SOAPHeaderElement headerElem) {
 339         if (nonSAAJHeaders != null) {
 340             nonSAAJHeaders.remove(headerElem);
 341         }
 342     }
 343 
 344     @Override
 345     public boolean addOrReplace(Header header) {
 346         remove(header.getNamespaceURI(), header.getLocalPart());
 347         return add(header);
 348     }
 349 
 350     @Override
 351     public void replace(Header old, Header header) {
 352         if (remove(old.getNamespaceURI(), old.getLocalPart()) == null)
 353             throw new IllegalArgumentException();


   1 /*
   2  * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.xml.internal.ws.api.message.saaj;
  27 
  28 import java.util.ArrayList;
  29 import java.util.Collections;
  30 import java.util.HashMap;
  31 import java.util.HashSet;
  32 import java.util.Iterator;
  33 import java.util.List;
  34 import java.util.Map;
  35 import java.util.Set;
  36 
  37 import javax.xml.namespace.QName;
  38 import javax.xml.soap.SOAPException;
  39 import javax.xml.soap.SOAPHeader;
  40 import javax.xml.soap.SOAPHeaderElement;
  41 import javax.xml.soap.SOAPMessage;
  42 
  43 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
  44 import com.sun.xml.internal.messaging.saaj.soap.impl.HeaderImpl;
  45 import com.sun.xml.internal.ws.api.SOAPVersion;
  46 import com.sun.xml.internal.ws.api.WSBinding;
  47 import com.sun.xml.internal.ws.api.message.Header;
  48 import com.sun.xml.internal.ws.api.message.MessageHeaders;
  49 import com.sun.xml.internal.ws.binding.SOAPBindingImpl;
  50 import com.sun.xml.internal.ws.message.saaj.SAAJHeader;
  51 
  52 public class SAAJMessageHeaders implements MessageHeaders {
  53     SOAPMessage sm;
  54     Map<SOAPHeaderElement, Header> nonSAAJHeaders;
  55     Map<QName, Integer> notUnderstoodCount;
  56     SOAPVersion soapVersion;
  57     private Set<QName> understoodHeaders;
  58 
  59     public SAAJMessageHeaders(SOAPMessage sm, SOAPVersion version) {
  60         this.sm = sm;
  61         this.soapVersion = version;
  62         initHeaderUnderstanding();
  63     }
  64 


 219         if (isNonSAAJHeader(header)) {
 220             //TODO assumes only one header with that name?
 221             addNonSAAJHeader(find(header.getNamespaceURI(), header.getLocalPart()),
 222                     header);
 223         }
 224 
 225         return true;
 226     }
 227 
 228     @Override
 229     public Header remove(QName name) {
 230         return remove(name.getNamespaceURI(), name.getLocalPart());
 231     }
 232 
 233     @Override
 234     public Header remove(String nsUri, String localName) {
 235         SOAPHeader soapHeader = ensureSOAPHeader();
 236         if (soapHeader == null) {
 237             return null;
 238         }
 239         SOAPDocumentImpl soapDocument = ((HeaderImpl)soapHeader).getSoapDocument();
 240         SOAPHeaderElement headerElem = find(nsUri, localName);
 241         if (headerElem == null) {
 242             return null;
 243         }
 244         headerElem = (SOAPHeaderElement) soapDocument.find(soapHeader.removeChild(headerElem));
 245 
 246         //it might have been a nonSAAJHeader - remove from that map
 247         removeNonSAAJHeader(headerElem);
 248 
 249         //remove it from understoodHeaders and notUnderstoodHeaders if present
 250         QName hdrName = (nsUri == null) ? new QName(localName) : new QName(nsUri, localName);
 251         if (understoodHeaders != null) {
 252             understoodHeaders.remove(hdrName);
 253         }
 254         removeNotUnderstood(hdrName);
 255 
 256         return new SAAJHeader(headerElem);
 257     }
 258 
 259     private void removeNotUnderstood(QName hdrName) {
 260         if (notUnderstoodCount == null) {
 261             return;
 262         }
 263         Integer notUnderstood = notUnderstoodCount.get(hdrName);
 264         if (notUnderstood != null) {


 316     private SOAPHeader ensureSOAPHeader() {
 317         SOAPHeader header;
 318         try {
 319             header = sm.getSOAPPart().getEnvelope().getHeader();
 320             if (header != null) {
 321                 return header;
 322             } else {
 323                 return sm.getSOAPPart().getEnvelope().addHeader();
 324             }
 325         } catch (Exception e) {
 326             return null;
 327         }
 328     }
 329 
 330     private boolean isNonSAAJHeader(Header header) {
 331         return !(header instanceof SAAJHeader);
 332     }
 333 
 334     private void addNonSAAJHeader(SOAPHeaderElement headerElem, Header header) {
 335         if (nonSAAJHeaders == null) {
 336             nonSAAJHeaders = new HashMap<>();
 337         }
 338         nonSAAJHeaders.put(headerElem, header);
 339     }
 340 
 341     private void removeNonSAAJHeader(SOAPHeaderElement headerElem) {
 342         if (nonSAAJHeaders != null) {
 343             nonSAAJHeaders.remove(headerElem);
 344         }
 345     }
 346 
 347     @Override
 348     public boolean addOrReplace(Header header) {
 349         remove(header.getNamespaceURI(), header.getLocalPart());
 350         return add(header);
 351     }
 352 
 353     @Override
 354     public void replace(Header old, Header header) {
 355         if (remove(old.getNamespaceURI(), old.getLocalPart()) == null)
 356             throw new IllegalArgumentException();


< prev index next >