📄 objecttohttpclientmethodrequest.java
字号:
/* * $Id: ObjectToHttpClientMethodRequest.java 13054 2008-10-10 21:45:36Z dfeist $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.transport.http.transformers;import org.mule.RequestContext;import org.mule.api.MuleEvent;import org.mule.api.MuleMessage;import org.mule.api.config.MuleProperties;import org.mule.api.transformer.TransformerException;import org.mule.api.transport.OutputHandler;import org.mule.transformer.AbstractMessageAwareTransformer;import org.mule.transport.NullPayload;import org.mule.transport.http.HttpConnector;import org.mule.transport.http.HttpConstants;import org.mule.transport.http.StreamPayloadRequestEntity;import org.mule.transport.http.i18n.HttpMessages;import org.mule.util.StringUtils;import org.mule.util.expression.ExpressionEvaluatorManager;import java.io.InputStream;import java.io.Serializable;import java.io.UnsupportedEncodingException;import java.net.URI;import java.net.URLEncoder;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.HttpVersion;import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;import org.apache.commons.httpclient.methods.DeleteMethod;import org.apache.commons.httpclient.methods.EntityEnclosingMethod;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.HeadMethod;import org.apache.commons.httpclient.methods.InputStreamRequestEntity;import org.apache.commons.httpclient.methods.OptionsMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.PutMethod;import org.apache.commons.httpclient.methods.StringRequestEntity;import org.apache.commons.httpclient.methods.TraceMethod;import org.apache.commons.httpclient.params.HttpMethodParams;import org.apache.commons.lang.SerializationUtils;/** * <code>ObjectToHttpClientMethodRequest</code> transforms a MuleMessage into a * HttpClient HttpMethod that represents an HttpRequest. */public class ObjectToHttpClientMethodRequest extends AbstractMessageAwareTransformer{ public ObjectToHttpClientMethodRequest() { setReturnClass(HttpMethod.class); registerSourceType(MuleMessage.class); registerSourceType(byte[].class); registerSourceType(String.class); registerSourceType(InputStream.class); registerSourceType(OutputHandler.class); registerSourceType(NullPayload.class); } protected int addParameters(String queryString, PostMethod postMethod, MuleMessage msg) { // Parse the HTTP argument list and convert to a NameValuePair // collection if (StringUtils.isBlank(queryString)) { return 0; } String currentParam; int equals; equals = queryString.indexOf("&"); if (equals > -1) { currentParam = queryString.substring(0, equals); queryString = queryString.substring(equals + 1); } else { currentParam = queryString; queryString = StringUtils.EMPTY; } int parameterIndex = -1; while (StringUtils.isNotBlank(currentParam)) { String paramName, paramValue; equals = currentParam.indexOf("="); if (equals > -1) { paramName = currentParam.substring(0, equals); paramValue = currentParam.substring(equals + 1); //Run query params through the expression evaluator// Object temp = ExpressionEvaluatorManager.evaluate(paramValue, msg, "$[", true);// if (temp != null)// {// //Process param collections// if (temp instanceof List)// {// StringBuffer buf = new StringBuffer();// List list = (List) temp;// for (Iterator iterator = list.iterator(); iterator.hasNext();)// {// Object object = iterator.next();// buf.append(object).append(",");// }// parameterIndex++;// postMethod.addParameter(paramName, buf.toString());// }// else if (temp instanceof Map)// {// Map map = (Map) temp;// for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();)// {// Map.Entry entry = (Map.Entry) iterator.next();// parameterIndex++;// postMethod.addParameter(entry.getKey().toString(), entry.getValue().toString());// }// }// else// {// parameterIndex++;// postMethod.addParameter(paramName, temp.toString());// }// }// else// { parameterIndex++; postMethod.addParameter(paramName, paramValue); //} } equals = queryString.indexOf("&"); if (equals > -1) { currentParam = queryString.substring(0, equals); queryString = queryString.substring(equals + 1); } else { currentParam = queryString; queryString = StringUtils.EMPTY; } } return parameterIndex + 1; } public Object transform(MuleMessage msg, String outputEncoding) throws TransformerException { Object src = msg.getPayload(); String endpoint = msg.getStringProperty(MuleProperties.MULE_ENDPOINT_PROPERTY, null); if (endpoint == null) { throw new TransformerException( HttpMessages.eventPropertyNotSetCannotProcessRequest( MuleProperties.MULE_ENDPOINT_PROPERTY), this); } String method = msg.getStringProperty(HttpConnector.HTTP_METHOD_PROPERTY, "POST"); try { //Allow Expressions to be embedded endpoint = endpoint.replaceAll("%23", "#"); endpoint = ExpressionEvaluatorManager.parse(endpoint, msg, true); URI uri = new URI(endpoint); HttpMethod httpMethod; if (HttpConstants.METHOD_GET.equals(method)) { httpMethod = new GetMethod(uri.toString()); String paramName = URLEncoder.encode(msg.getStringProperty(HttpConnector.HTTP_GET_BODY_PARAM_PROPERTY, HttpConnector.DEFAULT_HTTP_GET_BODY_PARAM_PROPERTY), outputEncoding); String paramValue = URLEncoder.encode(src.toString(), outputEncoding); String query = uri.getRawQuery(); if (!(src instanceof NullPayload) && !StringUtils.EMPTY.equals(src)) { if (query == null) { query = paramName + "=" + paramValue; } else { query += "&" + paramName + "=" + paramValue; } } httpMethod.setQueryString(query); } else if (HttpConstants.METHOD_POST.equalsIgnoreCase(method)) { PostMethod postMethod = new PostMethod(uri.toString()); String paramName = msg.getStringProperty(HttpConnector.HTTP_POST_BODY_PARAM_PROPERTY, null); if (paramName == null) { // Call method to manage the parameter array addParameters(uri.getQuery(), postMethod, msg); setupEntityMethod(src, outputEncoding, msg, uri, postMethod); } else { postMethod.addParameter(paramName, src.toString()); } httpMethod = postMethod; } else if (HttpConstants.METHOD_PUT.equalsIgnoreCase(method)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -