001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Emil Ong
028: */
029:
030: package com.caucho.xml.saaj;
031:
032: import javax.xml.XMLConstants;
033: import javax.xml.namespace.*;
034: import javax.xml.soap.*;
035:
036: import com.caucho.xml.QNode;
037:
038: import org.w3c.dom.Element;
039:
040: public abstract class SOAPEnvelopeImpl extends SOAPElementImpl
041: implements SOAPEnvelope {
042: protected SOAPHeader _header;
043: protected SOAPBody _body;
044:
045: // SOAP 1.1
046:
047: protected static final NameImpl SOAP_1_1_ENVELOPE_NAME = new NameImpl(
048: SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Envelope",
049: SOAPConstants.SOAP_ENV_PREFIX);
050:
051: protected static final NameImpl SOAP_1_1_BODY_NAME = new NameImpl(
052: SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Body",
053: SOAPConstants.SOAP_ENV_PREFIX);
054:
055: protected static final NameImpl SOAP_1_1_HEADER_NAME = new NameImpl(
056: SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Header",
057: SOAPConstants.SOAP_ENV_PREFIX);
058:
059: // SOAP 1.2
060:
061: protected static final NameImpl SOAP_1_2_ENVELOPE_NAME = new NameImpl(
062: SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Envelope",
063: SOAPConstants.SOAP_ENV_PREFIX);
064:
065: protected static final NameImpl SOAP_1_2_BODY_NAME = new NameImpl(
066: SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Body",
067: SOAPConstants.SOAP_ENV_PREFIX);
068:
069: protected static final NameImpl SOAP_1_2_HEADER_NAME = new NameImpl(
070: SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Header",
071: SOAPConstants.SOAP_ENV_PREFIX);
072:
073: protected SOAPEnvelopeImpl(SOAPFactory factory, NameImpl name)
074: throws SOAPException {
075: super (factory, name);
076: }
077:
078: public SOAPBody addBody() throws SOAPException {
079: if (_body != null)
080: throw new SOAPException("Envelope already contains Body");
081:
082: // addChildElement might check if _body != null for SOAP 1.2
083: SOAPBody body = (SOAPBody) _factory
084: .createElement(getBodyName());
085:
086: addChildElement(body);
087:
088: _body = body;
089:
090: return _body;
091: }
092:
093: public SOAPHeader addHeader() throws SOAPException {
094: if (_header != null)
095: throw new SOAPException("Envelope already contains Header");
096:
097: _header = (SOAPHeader) _factory.createElement(getHeaderName());
098:
099: // make sure the ordering is correct if a header is inserted
100: // after the body
101: SOAPBody body = _body;
102:
103: if (body != null)
104: body.detachNode();
105:
106: addChildElement(_header);
107:
108: if (body != null) {
109: addChildElement(body);
110:
111: _body = body;
112: }
113:
114: return _header;
115: }
116:
117: public Name createName(String localName) throws SOAPException {
118: return _factory.createName(localName);
119: }
120:
121: public Name createName(String localName, String prefix, String uri)
122: throws SOAPException {
123: return _factory.createName(localName, prefix, uri);
124: }
125:
126: public SOAPBody getBody() throws SOAPException {
127: return _body;
128: }
129:
130: public SOAPHeader getHeader() throws SOAPException {
131: return _header;
132: }
133:
134: public SOAPElement setElementQName(QName newName)
135: throws SOAPException {
136: throw new SOAPException("Cannot set name of SOAP Envelope");
137: }
138:
139: protected void deepCopy(Element source) throws SOAPException {
140: super .deepCopy(source);
141:
142: for (SOAPNodeImpl node = _firstChild; node != null; node = node._next) {
143: if (node instanceof SOAPBody) {
144: _body = (SOAPBody) node;
145: } else if (node instanceof SOAPHeader) {
146: _header = (SOAPHeader) node;
147: }
148:
149: if (_body != null && _header != null)
150: break;
151: }
152: }
153:
154: protected abstract Name getBodyName();
155:
156: protected abstract Name getHeaderName();
157: }
|