1/*
2 * Copyright (c) 1997, 2014, 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
26package com.sun.xml.internal.ws.api.message;
27
28import javax.xml.bind.JAXBException;
29import javax.xml.bind.Unmarshaller;
30import javax.xml.namespace.QName;
31import javax.xml.soap.SOAPException;
32import javax.xml.soap.SOAPMessage;
33import javax.xml.stream.XMLStreamException;
34import javax.xml.stream.XMLStreamReader;
35import javax.xml.stream.XMLStreamWriter;
36import javax.xml.transform.Source;
37
38import org.xml.sax.ContentHandler;
39import org.xml.sax.ErrorHandler;
40import org.xml.sax.SAXException;
41
42import com.sun.istack.internal.NotNull;
43import com.sun.xml.internal.bind.api.Bridge;
44import com.sun.xml.internal.ws.api.SOAPVersion;
45import com.sun.xml.internal.ws.api.WSBinding;
46import com.sun.xml.internal.ws.api.addressing.AddressingVersion;
47import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
48import com.sun.xml.internal.ws.message.saaj.SAAJMessage;
49import com.sun.xml.internal.ws.message.stream.StreamMessage;
50import com.sun.xml.internal.ws.spi.db.XMLBridge;
51
52/**
53 * A <code>MessageWrapper</code> wraps the Message for the access through Packet.
54 *
55 * @author shih-chang.chen@oracle.com
56 */
57class MessageWrapper extends StreamMessage {
58
59    Packet packet;
60    Message delegate;
61    StreamMessage streamDelegate;
62
63    @Override
64    public void writePayloadTo(ContentHandler contentHandler, ErrorHandler errorHandler, boolean fragment) throws SAXException {
65        streamDelegate.writePayloadTo(contentHandler, errorHandler, fragment);
66    }
67
68    @Override
69    public String getBodyPrologue() {
70        return streamDelegate.getBodyPrologue();
71    }
72
73    @Override
74    public String getBodyEpilogue() {
75        return streamDelegate.getBodyEpilogue();
76    }
77
78    MessageWrapper(Packet p, Message m) {
79        super(m.getSOAPVersion());
80        packet = p;
81        delegate = m;
82        streamDelegate = (m instanceof StreamMessage) ? (StreamMessage) m : null;
83        setMessageMedadata(p);
84    }
85
86    @Override
87    public int hashCode() {
88        return delegate.hashCode();
89    }
90
91    @Override
92    public boolean equals(Object obj) {
93        return delegate.equals(obj);
94    }
95
96    @Override
97    boolean  isProtocolMessage() { return delegate.isProtocolMessage(); }
98    @Override
99    void  setIsProtocolMessage() { delegate.setIsProtocolMessage(); }
100
101    @Override
102    public boolean hasHeaders() {
103        return delegate.hasHeaders();
104    }
105
106    @Override
107    public AttachmentSet getAttachments() {
108        return delegate.getAttachments();
109    }
110
111    @Override
112    public String toString() {
113        return "{MessageWrapper: " + delegate.toString() + "}";
114    }
115
116    @Override
117    public boolean isOneWay(WSDLPort port) {
118        return delegate.isOneWay(port);
119    }
120
121    @Override
122    public String getPayloadLocalPart() {
123        return delegate.getPayloadLocalPart();
124    }
125
126    @Override
127    public String getPayloadNamespaceURI() {
128        return delegate.getPayloadNamespaceURI();
129    }
130
131    @Override
132    public boolean hasPayload() {
133        return delegate.hasPayload();
134    }
135
136    @Override
137    public boolean isFault() {
138        return delegate.isFault();
139    }
140
141    @Override
142    public QName getFirstDetailEntryName() {
143        return delegate.getFirstDetailEntryName();
144    }
145
146    @Override
147    public Source readEnvelopeAsSource() {
148        //TODO if (delegate instanceof SAAJMessage)
149        return delegate.readEnvelopeAsSource();
150    }
151
152    @Override
153    public Source readPayloadAsSource() {
154        //TODO if (delegate instanceof SAAJMessage)
155        return delegate.readPayloadAsSource();
156    }
157
158    @Override
159    public SOAPMessage readAsSOAPMessage() throws SOAPException {
160        if (!(delegate instanceof SAAJMessage)) {
161            delegate = toSAAJ(packet, null);
162        }
163        return delegate.readAsSOAPMessage();
164    }
165
166    @Override
167    public SOAPMessage readAsSOAPMessage(Packet p, boolean inbound) throws SOAPException {
168        if (!(delegate instanceof SAAJMessage)) {
169            delegate = toSAAJ(p, inbound);
170        }
171        return delegate.readAsSOAPMessage();
172    }
173
174    @Override
175    public Object readPayloadAsJAXB(Unmarshaller unmarshaller) throws JAXBException {
176        return delegate.readPayloadAsJAXB(unmarshaller);
177    }
178
179    @Override
180    public <T> T readPayloadAsJAXB(Bridge<T> bridge) throws JAXBException {
181        return delegate.readPayloadAsJAXB(bridge);
182    }
183
184    @Override
185    public <T> T readPayloadAsJAXB(XMLBridge<T> bridge) throws JAXBException {
186        return delegate.readPayloadAsJAXB(bridge);
187    }
188
189    @Override
190    public XMLStreamReader readPayload() {
191        try {
192            return delegate.readPayload();
193        } catch (XMLStreamException e) {
194            e.printStackTrace();
195        }
196        return null;
197    }
198
199    @Override
200    public void consume() {
201        delegate.consume();
202    }
203
204    @Override
205    public void writePayloadTo(XMLStreamWriter sw) throws XMLStreamException {
206        delegate.writePayloadTo(sw);
207    }
208
209    @Override
210    public void writeTo(XMLStreamWriter sw) throws XMLStreamException {
211        delegate.writeTo(sw);
212    }
213
214    @Override
215    public void writeTo(ContentHandler contentHandler, ErrorHandler errorHandler)
216            throws SAXException {
217        delegate.writeTo(contentHandler, errorHandler);
218    }
219
220    @Override
221    public Message copy() {
222        return delegate.copy().copyFrom(delegate);
223    }
224
225    @Override
226    public String getID(WSBinding binding) {
227        return delegate.getID(binding);
228    }
229
230    @Override
231    public String getID(AddressingVersion av, SOAPVersion sv) {
232        return delegate.getID(av, sv);
233    }
234
235    @Override
236    public SOAPVersion getSOAPVersion() {
237        return delegate.getSOAPVersion();
238    }
239
240    @Override
241    public @NotNull MessageHeaders getHeaders() {
242        return delegate.getHeaders();
243    }
244
245    @Override
246    public void setMessageMedadata(MessageMetadata metadata) {
247        super.setMessageMedadata(metadata);
248        delegate.setMessageMedadata(metadata);
249    }
250}
251