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 
  26 package com.sun.xml.internal.ws.api.message;
  27 
  28 import javax.xml.bind.JAXBException;
  29 import javax.xml.bind.Unmarshaller;
  30 import javax.xml.namespace.QName;
  31 import javax.xml.soap.SOAPException;
  32 import javax.xml.soap.SOAPMessage;
  33 import javax.xml.stream.XMLStreamException;
  34 import javax.xml.stream.XMLStreamReader;
  35 import javax.xml.stream.XMLStreamWriter;
  36 import javax.xml.transform.Source;
  37 
  38 import org.xml.sax.ContentHandler;
  39 import org.xml.sax.ErrorHandler;
  40 import org.xml.sax.SAXException;
  41 
  42 import com.sun.istack.internal.NotNull;
  43 import com.sun.xml.internal.bind.api.Bridge;
  44 import com.sun.xml.internal.ws.api.SOAPVersion;
  45 import com.sun.xml.internal.ws.api.WSBinding;
  46 import com.sun.xml.internal.ws.api.addressing.AddressingVersion;
  47 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort;
  48 import com.sun.xml.internal.ws.message.saaj.SAAJMessage;
  49 import com.sun.xml.internal.ws.message.stream.StreamMessage;
  50 import 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  */
  57 class 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 }