001    /**
002     *
003     * Licensed to the Apache Software Foundation (ASF) under one or more
004     * contributor license agreements.  See the NOTICE file distributed with
005     * this work for additional information regarding copyright ownership.
006     * The ASF licenses this file to You under the Apache License, Version 2.0
007     * (the "License"); you may not use this file except in compliance with
008     * the License.  You may obtain a copy of the License at
009     *
010     * http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.camel.component.cxf;
019    
020    import org.apache.camel.CamelContext;
021    import org.apache.camel.impl.DefaultExchange;
022    import org.apache.cxf.message.Exchange;
023    import org.apache.cxf.message.Message;
024    import org.apache.cxf.transport.Conduit;
025    import org.apache.cxf.transport.Destination;
026    
027    /**
028     * An {@link Exchange} for working with Apache CXF which expoes the underlying
029     * CXF messages via {@link #getInMessage()} and {@link #getOutMessage()} along with the
030     * {@link #getExchange()} 
031     *
032     * @version $Revision: 550760 $
033     */
034    public class CxfExchange extends DefaultExchange {
035        private final CxfBinding binding;
036        private Exchange exchange;
037    
038        public CxfExchange(CamelContext context, CxfBinding binding) {
039            super(context);
040            this.binding = binding;
041        }
042    
043        public CxfExchange(CamelContext context, CxfBinding binding, Exchange exchange) {
044            super(context);
045            this.binding = binding;
046            this.exchange = exchange;
047    
048            setIn(new CxfMessage(exchange.getInMessage()));
049            setOut(new CxfMessage(exchange.getOutMessage()));
050            setFault(new CxfMessage(exchange.getInFaultMessage()));
051        }
052    
053        public CxfExchange(CamelContext context, CxfBinding binding, Message inMessage) {
054            super(context);
055            this.binding = binding;
056            this.exchange = inMessage.getExchange();
057    
058            setIn(new CxfMessage(inMessage));
059            if (exchange != null) {
060                setOut(new CxfMessage(exchange.getOutMessage()));
061                setFault(new CxfMessage(exchange.getInFaultMessage()));
062            }
063        }
064    
065        @Override
066        public CxfMessage getIn() {
067            return (CxfMessage) super.getIn();
068        }
069    
070        @Override
071        public CxfMessage getOut() {
072            return (CxfMessage) super.getOut();
073        }
074    
075        @Override
076        public CxfMessage getOut(boolean lazyCreate) {
077            return (CxfMessage) super.getOut(lazyCreate);
078        }
079    
080        @Override
081        public CxfMessage getFault() {
082            return (CxfMessage) super.getFault();
083        }
084    
085        /**
086         * @return the Camel <-> JBI binding
087         */
088        public CxfBinding getBinding() {
089            return binding;
090        }
091    
092        // Expose CXF APIs directly on the exchange
093        //-------------------------------------------------------------------------
094    
095        /**
096         * Returns the underlying CXF message exchange for an inbound exchange
097         * or null for outbound messages
098         *
099         * @return the inbound message exchange
100         */
101        public Exchange getExchange() {
102            return exchange;
103        }
104    
105        public Message getInMessage() {
106            return getIn().getMessage();
107        }
108    
109        public Message getOutMessage() {
110            return getOut().getMessage();
111        }
112    
113        public Message getOutFaultMessage() {
114            return getExchange().getOutFaultMessage();
115        }
116    
117        public Message getInFaultMessage() {
118            return getExchange().getInFaultMessage();
119        }
120    
121        public Destination getDestination() {
122            return getExchange().getDestination();
123        }
124    
125        public Conduit getConduit(Message message) {
126            return getExchange().getConduit(message);
127        }
128    
129        @Override
130        protected CxfMessage createInMessage() {
131            return new CxfMessage();
132        }
133    
134        @Override
135        protected CxfMessage createOutMessage() {
136            return new CxfMessage();
137        }
138    }