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 /** 27 * 28 * @author SAAJ RI Development Team 29 */ 30 package com.sun.xml.internal.messaging.saaj.soap.ver1_2; 31 32 import java.util.logging.Logger; 33 import java.util.logging.Level; 34 35 import javax.xml.namespace.QName; 36 import javax.xml.soap.*; 37 38 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl; 39 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument; 40 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; 41 import com.sun.xml.internal.messaging.saaj.soap.impl.HeaderImpl; 42 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; 43 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants; 44 import org.w3c.dom.Element; 45 46 47 public class Header1_2Impl extends HeaderImpl { 48 49 protected static final Logger log = 50 Logger.getLogger( 51 LogDomainConstants.SOAP_VER1_2_DOMAIN, 52 "com.sun.xml.internal.messaging.saaj.soap.ver1_2.LocalStrings"); 53 54 public Header1_2Impl(SOAPDocumentImpl ownerDocument, String prefix) { 55 super(ownerDocument, NameImpl.createHeader1_2Name(prefix)); 56 } 57 58 public Header1_2Impl(SOAPDocumentImpl ownerDoc, Element domElement) { 59 super(ownerDoc, domElement); 60 } 61 62 @Override 63 protected NameImpl getNotUnderstoodName() { 64 return NameImpl.createNotUnderstood1_2Name(null); 65 } 66 67 @Override 68 protected NameImpl getUpgradeName() { 69 return NameImpl.createUpgrade1_2Name(null); 70 } 71 72 @Override 73 protected NameImpl getSupportedEnvelopeName() { 74 return NameImpl.createSupportedEnvelope1_2Name(null); 75 } 76 77 @Override 78 public SOAPHeaderElement addNotUnderstoodHeaderElement(final QName sourceName) 79 throws SOAPException { 80 81 if (sourceName == null) { 82 log.severe("SAAJ0410.ver1_2.no.null.to.addNotUnderstoodHeader"); 83 throw new SOAPException("Cannot pass NULL to addNotUnderstoodHeaderElement"); 84 } 85 if ("".equals(sourceName.getNamespaceURI())) { 86 log.severe("SAAJ0417.ver1_2.qname.not.ns.qualified"); 87 throw new SOAPException("The qname passed to addNotUnderstoodHeaderElement must be namespace-qualified"); 88 } 89 String prefix = sourceName.getPrefix(); 90 if ("".equals(prefix)) { 91 prefix = "ns1"; 92 } 93 Name notunderstoodName = getNotUnderstoodName(); 94 SOAPHeaderElement notunderstoodHeaderElement = 95 (SOAPHeaderElement) addChildElement(notunderstoodName); 96 notunderstoodHeaderElement.addAttribute( 97 NameImpl.createFromUnqualifiedName("qname"), 98 getQualifiedName( 99 new QName( 100 sourceName.getNamespaceURI(), 101 sourceName.getLocalPart(), 102 prefix))); 103 notunderstoodHeaderElement.addNamespaceDeclaration( 104 prefix, 105 sourceName.getNamespaceURI()); 106 return notunderstoodHeaderElement; 107 } 108 109 @Override 110 public SOAPElement addTextNode(String text) throws SOAPException { 111 log.log( 112 Level.SEVERE, 113 "SAAJ0416.ver1_2.adding.text.not.legal", 114 getElementQName()); 115 throw new SOAPExceptionImpl("Adding text to SOAP 1.2 Header is not legal"); 116 } 117 118 @Override 119 protected SOAPHeaderElement createHeaderElement(Name name) 120 throws SOAPException { 121 String uri = name.getURI(); 122 if (uri == null || uri.equals("")) { 123 log.severe("SAAJ0413.ver1_2.header.elems.must.be.ns.qualified"); 124 throw new SOAPExceptionImpl("SOAP 1.2 header elements must be namespace qualified"); 125 } 126 return new HeaderElement1_2Impl( 127 ((SOAPDocument) getOwnerDocument()).getDocument(), 128 name); 129 } 130 131 @Override 132 protected SOAPHeaderElement createHeaderElement(QName name) 133 throws SOAPException { 134 String uri = name.getNamespaceURI(); 135 if (uri == null || uri.equals("")) { 136 log.severe("SAAJ0413.ver1_2.header.elems.must.be.ns.qualified"); 137 throw new SOAPExceptionImpl("SOAP 1.2 header elements must be namespace qualified"); 138 } 139 return new HeaderElement1_2Impl( 140 ((SOAPDocument) getOwnerDocument()).getDocument(), 141 name); 142 } 143 144 @Override 145 public void setEncodingStyle(String encodingStyle) throws SOAPException { 146 log.severe("SAAJ0409.ver1_2.no.encodingstyle.in.header"); 147 throw new SOAPExceptionImpl("encodingStyle attribute cannot appear on Header"); 148 } 149 150 @Override 151 public SOAPElement addAttribute(Name name, String value) 152 throws SOAPException { 153 if (name.getLocalName().equals("encodingStyle") 154 && name.getURI().equals(NameImpl.SOAP12_NAMESPACE)) { 155 156 setEncodingStyle(value); 157 } 158 return super.addAttribute(name, value); 159 } 160 161 @Override 162 public SOAPElement addAttribute(QName name, String value) 163 throws SOAPException { 164 if (name.getLocalPart().equals("encodingStyle") 165 && name.getNamespaceURI().equals(NameImpl.SOAP12_NAMESPACE)) { 166 167 setEncodingStyle(value); 168 } 169 return super.addAttribute(name, value); 170 } 171 }