[jboss-dev-forums] [JBoss ESB Development] - Re: httprouter issues with GET/POST WADL Services and Web Routing

Luke Samad do-not-reply at jboss.com
Fri Apr 22 19:00:59 EDT 2011


Luke Samad [http://community.jboss.org/people/luke.samad] created the discussion

"Re: httprouter issues with GET/POST WADL Services and Web Routing"

To view the discussion, visit: http://community.jboss.org/message/601696#601696

--------------------------------------------------------------
I found this post extremely useful and I managed this by writing a custom action. I figured it might help others. Thank you guys for the great start.


        <service category="Case" description="CRUD on docket" invmScope="GLOBAL" invmTransacted="true" name="Docket">

            <listeners>

                <http-gateway name="httpDocket" payloadAs="STRING" urlPattern="client/docket/*">

                    <property name="synchronousTimeout" value="150000" />

                </http-gateway>

            </listeners>

            <actions mep="RequestResponse">

                <action class="gov.usc.commons.soa.esb.actions.HttpRestProxyAction" name="DocketAction">

                    <property name="endpointUrl" value="${client.docket.war.url}" />

                    <property name="logDebug" value="${log.case}" />

                </action>

            </actions>

        </service>


import java.util.HashMap;

import java.util.List;

import java.util.Map;


import org.apache.log4j.Logger;

import org.jboss.soa.esb.actions.AbstractActionLifecycle;

import org.jboss.soa.esb.actions.ActionProcessingException;

import org.jboss.soa.esb.actions.BeanConfiguredAction;

import org.jboss.soa.esb.http.HttpHeader;

import org.jboss.soa.esb.http.HttpRequest;

import org.jboss.soa.esb.message.Message;


public class HttpRestProxyAction extends AbstractActionLifecycle implements BeanConfiguredAction {

    private static final Logger log = Logger.getLogger(HttpRestProxyAction.class);

    private String endpointUrl;

    private String logDebug;

    private Boolean debug = Boolean.FALSE;


    public Message process(Message message) throws ActionProcessingException {

        debug = (logDebug != null && logDebug.equalsIgnoreCase("true")) ? Boolean.TRUE : Boolean.FALSE;


        HttpRequest request = HttpRequest.getRequest(message);

        String outputXml = null;

        String inputXml = null;


        Object defaultLocation = message.getBody().get();

        if (defaultLocation != null && !defaultLocation.getClass().getSimpleName().equals("byte[]")) {

            log.info("defaultLocation class type " + defaultLocation.getClass().getSimpleName());

            inputXml = (String) defaultLocation;

        }


        if(debug && inputXml != null){

            log.info("#############################");

            log.info("Input XML >>>> \n"+inputXml);

            log.info("#############################");

        }


        HashMap<String, String> headers = populateHeaders(request.getHeaders());

        HashMap<String, String> params = populateParameters(request.getQueryParams());

        if (request.getMethod().equals("GET")) {

            if (!headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executeGet(endpointUrl, params, headers);

                message.getBody().add(outputXml);

            } else if (headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executeGet(endpointUrl, params);

                message.getBody().add(outputXml);

            } else {

                outputXml = HttpClientUtil.executeGet(endpointUrl);

                message.getBody().add(outputXml);

            }

        } else if (request.getMethod().equals("POST")) {

            if (!headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executePost(inputXml, endpointUrl, params, headers);

                message.getBody().add(outputXml);

            } else if (headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executePost(inputXml, endpointUrl, params);

                message.getBody().add(outputXml);

            } else {

                outputXml = HttpClientUtil.executePost(inputXml, endpointUrl);

                message.getBody().add(outputXml);

            }

        } else if (request.getMethod().equals("PUT")) {

            if (!headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executePut(inputXml, endpointUrl, params, headers);

                message.getBody().add(outputXml);

            } else if (headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executePut(inputXml, endpointUrl, params);

                message.getBody().add(outputXml);

            } else {

                outputXml = HttpClientUtil.executePut(inputXml, endpointUrl);

                message.getBody().add(outputXml);

            }

        } else if (request.getMethod().equals("DELETE")) {

            if (!headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executeDelete(endpointUrl, params, headers);

                message.getBody().add(outputXml);

            } else if (headers.isEmpty() && !params.isEmpty()) {

                outputXml = HttpClientUtil.executeDelete(endpointUrl, params);

                message.getBody().add(outputXml);

            } else {

                outputXml = HttpClientUtil.executeDelete(endpointUrl);

                message.getBody().add(outputXml);

            }

        }


        if(debug && outputXml != null){

            log.info("#############################");

            log.info("Output XML \n"+outputXml);

            log.info("#############################");

        }


        return message;

    }


    private HashMap<String, String> populateHeaders(List<HttpHeader> requestHeaders) {

        HashMap<String, String> headers = new HashMap<String, String>();

        if (requestHeaders != null && !requestHeaders.isEmpty()) {

            if (debug) {

                log.debug("****************** Request Headers ******************");

            }

            for (HttpHeader header : requestHeaders) {

                    if (debug) {

                        log.info("key: " + header.getName() + " " + "value: " + header.getValue());

                    }

                    headers.put(header.getName(), header.getValue());

            }

        }

        return headers;

    }


    private HashMap<String, String> populateParameters(Map<String, String[]> requestParameters) {

        HashMap<String, String> params = new HashMap<String, String>();

        if (requestParameters != null && !requestParameters.isEmpty()) {

            if (debug) {

                log.info("******************Request parameters ******************");

            }

            for (String s : requestParameters.keySet()) {

                String[] value = requestParameters.get(s);

                if (debug) {

                    log.info("key " + s + " " + "value " + value[0]);

                }

                params.put(s, value[0]);

            }

        }

        return params;

    }


    public void setEndpointUrl(String endpointUrl) {

        this.endpointUrl = endpointUrl;

    }


    public void setLogDebug(String logDebug) {

        this.logDebug = logDebug;

    }


}




import java.io.InputStream;

import java.io.PrintWriter;

import java.io.StringWriter;

import java.util.HashMap;


import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpMethod;

import org.apache.commons.httpclient.NameValuePair;

import org.apache.commons.httpclient.methods.DeleteMethod;

import org.apache.commons.httpclient.methods.GetMethod;

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.util.URIUtil;

import org.apache.commons.io.IOUtils;

import org.apache.log4j.Logger;


public class HttpClientUtil {

    public static final Logger log = Logger.getLogger(HttpClientUtil.class);



    public static String executeGet(String url){

        log.info("entering HTTP GET with no parameters and no headers");

        log.info("URL >> "+url);

        String xml = null;

        GetMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new GetMethod(url);

            int httpStatusCode = httpClient.executeMethod(method);

            assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            logHTTPStatusCode(httpStatusCode);

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }




    public static String executeGet(String url, HashMap<String, String> parameters){

        log.info("entering HTTP GET with parameters and no headers");

        log.info("URL >> "+url);


        String xml = null;

        GetMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new GetMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                method.setQueryString(params);

            }

            int httpStatusCode = httpClient.executeMethod(method);

            assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            logHTTPStatusCode(httpStatusCode);

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }



    public static String executeGet(String url, HashMap<String, String> parameters, HashMap<String, String> headers ){

        log.info("entering HTTP GET with parameters and headers");

        log.info("URL >> "+url);

        String xml = null;

        GetMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new GetMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                method.setQueryString(params);

            }

            if(headers!=null && headers.size() > 0){

                setRequestHeaders(method, headers);

            }

            int httpStatusCode = httpClient.executeMethod(method);

            assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            logHTTPStatusCode(httpStatusCode);

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }





    public static String executePut(String xml, String url){

        log.info("entering HTTP PUT with no parameters and no headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PutMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PutMethod(url);

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            logHTTPStatusCode(httpStatusCode);

              InputStream updateResponse = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(updateResponse ), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }



    public static String executePut(String xml, String url, HashMap<String, String> parameters){

        log.info("entering HTTP PUT with parameters and no headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PutMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PutMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                if(params!= null)

                method.setQueryString(params);

            }

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              logHTTPStatusCode(httpStatusCode);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

              InputStream updateResponse = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(updateResponse ), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }



    public static String executePut(String xml, String url, HashMap<String, String> parameters, HashMap<String, String> headers ){

        log.info("entering HTTP PUT with parameters and headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PutMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PutMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                if(params!= null)

                method.setQueryString(params);

            }

            if(headers!=null && headers.size() > 0){

                setRequestHeaders(method, headers);

            }

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              logHTTPStatusCode(httpStatusCode);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

              InputStream updateResponse = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(updateResponse ), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }


    public static String executePost(String xml, String url){

        log.info("entering HTTP POST with no parameters and no headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PostMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PostMethod(url);

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

              logHTTPStatusCode(httpStatusCode);

              InputStream response = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }



    public static String executePost(String xml, String url,  HashMap<String, String> parameters){

        log.info("entering HTTP POST with parameters and no headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PostMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PostMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters);

                if(params!= null)

                method.setQueryString(params);

            }

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

              logHTTPStatusCode(httpStatusCode);

              InputStream response = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }



    public static String executePost(String xml, String url,  HashMap<String, String> parameters, HashMap<String, String> headers ){

        log.info("entering HTTP POST with parameters and headers");

        log.info("URL >> "+url);

        String xmlReturn = null;

        PostMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new PostMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters);

                if(params!= null)

                method.setQueryString(params);

            }

            if(headers!=null && headers.size() > 0){

                setRequestHeaders(method, headers);

            }

            method.setRequestEntity(new StringRequestEntity(xml, "application/xml", "UTF8"));

              int httpStatusCode = httpClient.executeMethod(method);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

              logHTTPStatusCode(httpStatusCode);

              InputStream response = method.getResponseBodyAsStream();

                xmlReturn = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xmlReturn;

    }



    public static String executeDelete(String url){

        log.info("entering HTTP DELETE with no parameters and no headers");

        log.info("URL >> "+url);

        DeleteMethod method = null;

        String xml = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new DeleteMethod(url);

            int httpStatusCode = httpClient.executeMethod(method);

              logHTTPStatusCode(httpStatusCode);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }



    public static String executeDelete(String url, HashMap<String, String> parameters){

        log.info("entering HTTP DELETE with parameters and no headers");

        log.info("URL >> "+url);

        String xml = null;

        DeleteMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new DeleteMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                if(params!= null)

                method.setQueryString(params);

            }

            int httpStatusCode = httpClient.executeMethod(method);

              logHTTPStatusCode(httpStatusCode);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }

    public static String executeDelete(String url, HashMap<String, String> parameters, HashMap<String, String> headers ){

        log.info("entering HTTP DELETE with parameters and headers");

        log.info("URL >> "+url);

        String xml = null;

        DeleteMethod method = null;

        try{

            HttpClient httpClient = new HttpClient();

            method = new DeleteMethod(url);

            if(parameters!=null && parameters.size() > 0){

                NameValuePair[] params = buildQueryParameters(parameters); 

                if(params!= null)

                method.setQueryString(params);

            }

            if(headers!=null && headers.size() > 0){

                setRequestHeaders(method, headers);

            }

            int httpStatusCode = httpClient.executeMethod(method);

              logHTTPStatusCode(httpStatusCode);

              assert (httpStatusCode == 200 || httpStatusCode == 204) ;

            InputStream response = method.getResponseBodyAsStream();

            xml = new String(IOUtils.toByteArray(response), method.getResponseCharSet());

        }catch (Exception e) {

            String exception = getExceptionStackTraceAsString(e);

            log.error(exception);

        }finally{

            method.releaseConnection();

        }

        return xml;

    }





    private static void setRequestHeaders(HttpMethod method , HashMap<String, String> headers ){

        log.info(" ************** headers ************** ");

        if(headers != null && headers.size() > 0){

            for(String s : headers.keySet()) {

                log.info("header="+s+" valkue="+headers.get(s));

                method.setRequestHeader(s, headers.get(s));

            }

        }

    }



    private static NameValuePair[] buildQueryParameters(HashMap<String, String> parameters ) throws Exception{

        log.info(" ************** parameters ************** ");

        NameValuePair[] params = null;

        if (parameters != null) {

            params = new NameValuePair[parameters.size()];

            int i = 0;

            for (String s : parameters.keySet()) {

                log.info("parameter="+s+" value="+parameters.get(s));

                params[i] = new NameValuePair(s, URIUtil.encodeQuery(parameters.get(s)));

                i++;

            }

        }

        return params;

    }



    private static String getExceptionStackTraceAsString(Exception exception) {

          StringWriter sw = new StringWriter();

          exception.printStackTrace(new PrintWriter(sw));

          return sw.toString();

    }



    private static void logHTTPStatusCode(int code ){

        log.info("HTTP Status code is >> "+code);

    }

}
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/601696#601696]

Start a new discussion in JBoss ESB Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2032]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-dev-forums/attachments/20110422/12ced510/attachment.html 


More information about the jboss-dev-forums mailing list