| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.component.sap.netweaver; |
| |
| import java.util.Map; |
| |
| import org.apache.camel.Endpoint; |
| import org.apache.camel.Exchange; |
| import org.apache.camel.Producer; |
| import org.apache.camel.impl.DefaultProducer; |
| import org.apache.camel.util.ExchangeHelper; |
| import org.apache.camel.util.ServiceHelper; |
| import org.apache.camel.util.URISupport; |
| import org.codehaus.jackson.map.ObjectMapper; |
| |
| public class NetWeaverProducer extends DefaultProducer { |
| |
| private Producer http; |
| |
| public NetWeaverProducer(Endpoint endpoint) { |
| super(endpoint); |
| } |
| |
| @Override |
| public NetWeaverEndpoint getEndpoint() { |
| return (NetWeaverEndpoint) super.getEndpoint(); |
| } |
| |
| @Override |
| public void process(Exchange exchange) throws Exception { |
| String command = ExchangeHelper.getMandatoryHeader(exchange, NetWeaverConstants.COMMAND, String.class); |
| |
| Exchange httpExchange = getEndpoint().createExchange(); |
| httpExchange.getIn().setHeader(Exchange.HTTP_PATH, command); |
| if (getEndpoint().isJson()) { |
| httpExchange.getIn().setHeader("Accept", "application/json"); |
| } |
| |
| log.debug("Calling SAP Net-Weaver {} with command {}", http, command); |
| http.process(httpExchange); |
| |
| String data = httpExchange.getOut().getBody(String.class); |
| |
| if (data != null && getEndpoint().isJsonAsMap() && getEndpoint().isJson()) { |
| // map json string to json map |
| ObjectMapper mapper = new ObjectMapper(); |
| Map<?, ?> map = mapper.readValue(data, Map.class); |
| |
| // if we only have one entry in the map, then put that as root (as it tends to return a single instance "d" |
| if (map.size() == 1 && getEndpoint().isFlatternMap()) { |
| exchange.getIn().setBody(map.values().iterator().next()); |
| } else { |
| exchange.getIn().setBody(map); |
| } |
| } else { |
| // store data as is |
| exchange.getIn().setBody(data); |
| } |
| } |
| |
| @Override |
| protected void doStart() throws Exception { |
| String url = getEndpoint().getUrl() + "?authUsername=" + getEndpoint().getUsername() + "&authPassword=" + getEndpoint().getPassword() + "&authMethod=Basic"; |
| if (log.isInfoEnabled()) { |
| log.info("Creating NetWeaverProducer using url: {}", URISupport.sanitizeUri(url)); |
| } |
| |
| http = getEndpoint().getCamelContext().getEndpoint(url).createProducer(); |
| ServiceHelper.startService(http); |
| } |
| |
| @Override |
| protected void doStop() throws Exception { |
| ServiceHelper.stopService(http); |
| } |
| } |