001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.servicemix.camel;
018:
019: import javax.jbi.messaging.MessageExchange;
020: import javax.jbi.messaging.NormalizedMessage;
021:
022: import org.apache.camel.CamelContext;
023: import org.apache.camel.ExchangePattern;
024: import org.apache.camel.impl.DefaultExchange;
025:
026: /**
027: * An {@link org.apache.camel.Exchange} working with JBI which exposes the underlying JBI
028: * features such as the JBI {@link #getMessageExchange()},
029: * {@link #getInMessage()} and {@link #getOutMessage()}
030: *
031: * @version $Revision: 563665 $
032: */
033: public class JbiExchange extends DefaultExchange {
034: private final JbiBinding binding;
035:
036: private MessageExchange messageExchange;
037:
038: public JbiExchange(CamelContext context, JbiBinding binding) {
039: super (context);
040: this .binding = binding;
041: populateProperties();
042: }
043:
044: public JbiExchange(CamelContext context, JbiBinding binding,
045: MessageExchange messageExchange) {
046: super (context);
047: this .binding = binding;
048: this .messageExchange = messageExchange;
049:
050: setPattern(ExchangePattern.fromWsdlUri(messageExchange
051: .getPattern().toString()));
052: // TODO we could maybe use the typesafe APIs of different derived APIs
053: // from JBI
054: setIn(new JbiMessage(messageExchange.getMessage("in")));
055: setOut(new JbiMessage(messageExchange.getMessage("out")));
056: setFault(new JbiMessage(messageExchange.getMessage("fault")));
057: populateProperties();
058: }
059:
060: @Override
061: public JbiMessage getIn() {
062: return (JbiMessage) super .getIn();
063: }
064:
065: @Override
066: public JbiMessage getOut() {
067: return (JbiMessage) super .getOut();
068: }
069:
070: @Override
071: public JbiMessage getOut(boolean lazyCreate) {
072: return (JbiMessage) super .getOut(lazyCreate);
073: }
074:
075: @Override
076: public JbiMessage getFault() {
077: return (JbiMessage) super .getFault();
078: }
079:
080: @Override
081: public JbiMessage getFault(boolean lazyCreate) {
082: return (JbiMessage) super .getFault(lazyCreate);
083: }
084:
085: /**
086: * @return the Camel <-> JBI binding
087: */
088: public JbiBinding getBinding() {
089: return binding;
090: }
091:
092: // Expose JBI features
093: // -------------------------------------------------------------------------
094:
095: /**
096: * Returns the underlying JBI message exchange for an inbound exchange or
097: * null for outbound messages
098: *
099: * @return the inbound message exchange
100: */
101: public MessageExchange getMessageExchange() {
102: return messageExchange;
103: }
104:
105: /**
106: * Returns the underlying In {@link NormalizedMessage}
107: *
108: * @return the In message
109: */
110: public NormalizedMessage getInMessage() {
111: return getIn().getNormalizedMessage();
112: }
113:
114: /**
115: * Returns the underlying Out {@link NormalizedMessage}
116: *
117: * @return the Out message
118: */
119: public NormalizedMessage getOutMessage() {
120: return getOut().getNormalizedMessage();
121: }
122:
123: /**
124: * Returns the underlying Fault {@link NormalizedMessage}
125: *
126: * @return the Fault message
127: */
128: public NormalizedMessage getFaultMessage() {
129: return getFault().getNormalizedMessage();
130: }
131:
132: // Implementation methods
133: // -------------------------------------------------------------------------
134:
135: @Override
136: protected JbiMessage createInMessage() {
137: return new JbiMessage();
138: }
139:
140: @Override
141: protected JbiMessage createOutMessage() {
142: return new JbiMessage();
143: }
144:
145: @Override
146: protected JbiMessage createFaultMessage() {
147: return new JbiMessage();
148: }
149:
150: private void populateProperties() {
151: if (messageExchange != null
152: && messageExchange.getOperation() != null) {
153: setProperty("jbi.operation", messageExchange.getOperation()
154: .toString());
155: }
156: }
157:
158: }
|