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.cxf.message.Message; 021 import org.apache.cxf.message.MessageImpl; 022 023 import java.io.InputStream; 024 import java.util.Set; 025 026 /** 027 * The binding of how Camel messages get mapped to Apache CXF and back again 028 * 029 * @version $Revision: 525898 $ 030 */ 031 public class CxfBinding { 032 033 public Object extractBodyFromCxf(CxfExchange exchange, Message message) { 034 // TODO how do we choose a format? 035 return getBody(message); 036 } 037 038 protected Object getBody(Message message) { 039 Set<Class<?>> contentFormats = message.getContentFormats(); 040 for (Class<?> contentFormat : contentFormats) { 041 Object answer = message.getContent(contentFormat); 042 if (answer != null) { 043 return answer; 044 } 045 } 046 return null; 047 } 048 049 public MessageImpl createCxfMessage(CxfExchange exchange) { 050 MessageImpl answer = (MessageImpl) exchange.getInMessage(); 051 052 // TODO is InputStream the best type to give to CXF? 053 CxfMessage in = exchange.getIn(); 054 Object body = in.getBody(InputStream.class); 055 if (body == null) { 056 body = in.getBody(); 057 } 058 answer.setContent(InputStream.class, body); 059 060 // no need to process headers as we reuse the CXF message 061 /* 062 // set the headers 063 Set<Map.Entry<String, Object>> entries = in.getHeaders().entrySet(); 064 for (Map.Entry<String, Object> entry : entries) { 065 answer.put(entry.getKey(), entry.getValue()); 066 } 067 */ 068 return answer; 069 } 070 071 public void storeCxfResponse(CxfExchange exchange, Message response) { 072 // no need to process headers as we use the CXF message 073 CxfMessage out = exchange.getOut(); 074 if (response != null) { 075 out.setMessage(response); 076 out.setBody(getBody(response)); 077 } 078 } 079 080 public void storeCxfResponse(CxfExchange exchange, Object response) { 081 CxfMessage out = exchange.getOut(); 082 if (response != null) { 083 out.setBody(response); 084 } 085 } 086 }