/* * 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.tuscany.sca.binding.jsonp.runtime; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.commons.codec.EncoderException; import org.apache.commons.codec.net.URLCodec; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.invocation.Invoker; import org.apache.tuscany.sca.invocation.Message; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JSONPInvoker implements Invoker { protected Operation operation; protected EndpointReference endpoint; protected ObjectMapper mapper; // TODO: share mapper btw invoker and servlet or move to databinding public JSONPInvoker(Operation operation, EndpointReference endpoint) { this.operation = operation; this.endpoint = endpoint; this.mapper = new ObjectMapper(); } public Message invoke(Message msg) { try { return doInvoke(msg); } catch (Exception e) { throw new RuntimeException(e); } } public Message doInvoke(Message msg) throws JsonGenerationException, JsonMappingException, IOException, EncoderException { String uri = endpoint.getDeployedURI() + "/" + operation.getName(); //String[] jsonArgs = objectsToJSON((Object[])msg.getBody()); String[] jsonArgs = objectsToJSONStrings((Object[])msg.getBody()); String responseJSON = invokeHTTPRequest(uri, jsonArgs); //Object response = jsonToObjects(responseJSON)[0]; msg.setBody(responseJSON); return msg; } protected String invokeHTTPRequest(String url, String[] jsonArgs) throws IOException, EncoderException { HttpClient httpclient = new DefaultHttpClient(); URLCodec uc = new URLCodec(); for (int i=0 ; i