You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Daniel Walsh <da...@verizon.net> on 2003/01/28 07:38:08 UTC

MultipartPostMethod - Passing Parameters

In trying to get to know the HttpClient component a bit, I attempted to write a simple program using a Java Servlet and the HttpClient API - the end result being that the client make a post to the servlet and the servlet return a brief HTML response to the client.  The next step would be to transfer a file between the two, however, I'm running into some trouble with this first step.

The only real requirements I've placed on this step is to use a post method instead of a get (because future steps would not be able to use a get), and to pass a parameter in the request.  The parameter is where my problems start.  After checking for this parameter on the server side, I throw an exception if it is non-existent.  This is as far as the program has been running for me.  

I'm using HTTP Client 2.0 Alpha 2, and Commons Logging 1.0.2.  I've included a couple of example classes that represent the basics of my code, and the thrown exception, in case anyone might have an idea as to what I am doing wrong:

_________________________________________________________________________________________________

CLIENT CLASS -


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

import java.io.*;
import java.net.*;

public class HttpClientExmpl
{

    public HttpClientExmpl()
    {
        init();
    }

    public void init()
    {
        MultipartPostMethod postMethod = new MultipartPostMethod();
        
        postMethod.setPath("/servlet/HttpClientExmplServlet");
        postMethod.addParameter("param-name", "param-value");
        
        HttpClient client = new HttpClient();
        HostConfiguration hostConfig = new HostConfiguration();
        
        hostConfig.setHost("localhost", 8081, "http");
        client.setConnectionTimeout(30000);
        client.setHostConfiguration(hostConfig);

        try
        {
            client.executeMethod(postMethod);
        }
        catch(HttpException httpEx)
        {
            httpEx.printStackTrace();
        }
        catch(IOException ioEx)
        {
            ioEx.printStackTrace();
        }
        
        String responseString = postMethod.getResponseBodyAsString();
        
        postMethod.releaseConnection();
        
        System.out.println(responseString);
    }
    
    public static void main(String args[])
    {
        new HttpClientExmpl();
    }
}


_________________________________________________________________________________________________

SERVLET CLASS -

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;

public class HttpClientExmplServlet extends HttpServlet
{
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String paramValue = request.getParameter("param-name");
        
        if(paramValue == null)
            throw new ServletException(new NullPointerException("The getParameter call returned null."));

        response.setContentType("text/html");
        
        PrintWriter writer = response.getWriter();
        StringBuffer buf = new StringBuffer();
            
        buf.append("<HTML>\n");
        buf.append("<HEAD>\n<TITLE>HTTP Client Example Application</TITLE>\n</HEAD>\n");
        buf.append("<BODY>\n");
        buf.append("The servlet received the parameter sent within the post method.\n");
        buf.append("</BODY>\n");
        buf.append("</HTML>");

        writer.write(buf.toString());
        writer.flush();
        writer.close();
    }
}

_________________________________________________________________________________________________

RESULTING EXCEPTION -

2003-01-27 21:08:27 StandardWrapperValve[HttpClientExmplServlet]: Servlet.service() for servlet HttpClientExmplServlet threw exception
java.lang.NullPointerException: The getParameter call returned null.
        at HttpClientExmplServlet.doPost(HttpClientExmplServlet.java:14)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:223)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorValve.java:142)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
        at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
        at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
        at java.lang.Thread.run(Thread.java:536)



Any suggestions would be greatly appreciated.

Thanks,

Daniel

p.s. I'm not even sure that MultipartPostMethod is the most suitable object for this.  If not, I'd appreciate a point in the right direction.

Re: MultipartPostMethod - Passing Parameters

Posted by Michael Becke <be...@u.washington.edu>.
I think Oleg is saying that you use MultipartPostMethod in your example  
but should probably use PostMethod instead.

Mike

On Tuesday, January 28, 2003, at 07:52 AM, Dave Walsh wrote:

> I saw your post and response, I have seen this guy alot on this forum.  
> I dod't myself know why we need a multipart form at this point, so if  
> it was omething that I said, ignore that for now.
>
> Dave
>
> Daniel Walsh wrote:
>
>> In trying to get to know the HttpClient component a bit, I attempted  
>> to write a simple program using a Java Servlet and the HttpClient API  
>> - the end result being that the client make a post to the servlet and  
>> the servlet return a brief HTML response to the client.  The next  
>> step would be to transfer a file between the two, however, I'm  
>> running into some trouble with this first step.
>>
>> The only real requirements I've placed on this step is to use a post  
>> method instead of a get (because future steps would not be able to  
>> use a get), and to pass a parameter in the request.  The parameter is  
>> where my problems start.  After checking for this parameter on the  
>> server side, I throw an exception if it is non-existent.  This is as  
>> far as the program has been running for me.
>> I'm using HTTP Client 2.0 Alpha 2, and Commons Logging 1.0.2.  I've  
>> included a couple of example classes that represent the basics of my  
>> code, and the thrown exception, in case anyone might have an idea as  
>> to what I am doing wrong:
>>
>> ______________________________________________________________________ 
>> ___________________________
>>
>> CLIENT CLASS -
>>
>>
>> import org.apache.commons.httpclient.*;
>> import org.apache.commons.httpclient.methods.*;
>>
>> import java.io.*;
>> import java.net.*;
>>
>> public class HttpClientExmpl
>> {
>>
>>    public HttpClientExmpl()
>>    {
>>        init();
>>    }
>>
>>    public void init()
>>    {
>>        MultipartPostMethod postMethod = new MultipartPostMethod();
>>               postMethod.setPath("/servlet/HttpClientExmplServlet");
>>        postMethod.addParameter("param-name", "param-value");
>>               HttpClient client = new HttpClient();
>>        HostConfiguration hostConfig = new HostConfiguration();
>>               hostConfig.setHost("localhost", 8081, "http");
>>        client.setConnectionTimeout(30000);
>>        client.setHostConfiguration(hostConfig);
>>
>>        try
>>        {
>>            client.executeMethod(postMethod);
>>        }
>>        catch(HttpException httpEx)
>>        {
>>            httpEx.printStackTrace();
>>        }
>>        catch(IOException ioEx)
>>        {
>>            ioEx.printStackTrace();
>>        }
>>               String responseString =  
>> postMethod.getResponseBodyAsString();
>>               postMethod.releaseConnection();
>>               System.out.println(responseString);
>>    }
>>       public static void main(String args[])
>>    {
>>        new HttpClientExmpl();
>>    }
>> }
>>
>>
>> ______________________________________________________________________ 
>> ___________________________
>>
>> SERVLET CLASS -
>>
>> import javax.servlet.*;
>> import javax.servlet.http.*;
>>
>> import java.io.*;
>>
>> public class HttpClientExmplServlet extends HttpServlet
>> {
>>       public void doPost(HttpServletRequest request,  
>> HttpServletResponse response) throws ServletException, IOException
>>    {
>>        String paramValue = request.getParameter("param-name");
>>               if(paramValue == null)
>>            throw new ServletException(new NullPointerException("The  
>> getParameter call returned null."));
>>
>>        response.setContentType("text/html");
>>               PrintWriter writer = response.getWriter();
>>        StringBuffer buf = new StringBuffer();
>>                   buf.append("<HTML>\n");
>>        buf.append("<HEAD>\n<TITLE>HTTP Client Example  
>> Application</TITLE>\n</HEAD>\n");
>>        buf.append("<BODY>\n");
>>        buf.append("The servlet received the parameter sent within the  
>> post method.\n");
>>        buf.append("</BODY>\n");
>>        buf.append("</HTML>");
>>
>>        writer.write(buf.toString());
>>        writer.flush();
>>        writer.close();
>>    }
>> }
>>
>> ______________________________________________________________________ 
>> ___________________________
>>
>> RESULTING EXCEPTION -
>>
>> 2003-01-27 21:08:27 StandardWrapperValve[HttpClientExmplServlet]:  
>> Servlet.service() for servlet HttpClientExmplServlet threw exception
>> java.lang.NullPointerException: The getParameter call returned null.
>>        at  
>> HttpClientExmplServlet.doPost(HttpClientExmplServlet.java:14)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>        at  
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli 
>> cationFilterChain.java:247)
>>        at  
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi 
>> lterChain.java:193)
>>        at  
>> org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(Monitor 
>> Filter.java:223)
>>        at  
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli 
>> cationFilterChain.java:213)
>>        at  
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi 
>> lterChain.java:193)
>>        at  
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa 
>> lve.java:243)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:566)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :472)
>>        at  
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>>        at  
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa 
>> lve.java:190)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:566)
>>        at  
>> org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve. 
>> java:246)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:564)
>>        at  
>> org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorV 
>> alve.java:142)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:564)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :472)
>>        at  
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>>        at  
>> org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2 
>> 347)
>>        at  
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja 
>> va:180)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:566)
>>        at  
>> org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcher 
>> Valve.java:170)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:564)
>>        at  
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja 
>> va:170)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:564)
>>        at  
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:4 
>> 68)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:564)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :472)
>>        at  
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>>        at  
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv 
>> e.java:174)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline. 
>> java:566)
>>        at  
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :472)
>>        at  
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>>        at  
>> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor 
>> .java:1027)
>>        at  
>> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.jav 
>> a:1125)
>>        at java.lang.Thread.run(Thread.java:536)
>>
>>
>>
>> Any suggestions would be greatly appreciated.
>>
>> Thanks,
>>
>> Daniel
>>
>> p.s. I'm not even sure that MultipartPostMethod is the most suitable  
>> object for this.  If not, I'd appreciate a point in the right  
>> direction.
>>
>>
>
>
>
> --
> To unsubscribe, e-mail:    
> <ma...@jakarta.apache.org>
> For additional commands, e-mail:  
> <ma...@jakarta.apache.org>
>


Re: MultipartPostMethod - Passing Parameters

Posted by Dave Walsh <dw...@esrv.com>.
I saw your post and response, I have seen this guy alot on this forum. 
 I dod't myself know why we need a multipart form at this point, so if 
it was omething that I said, ignore that for now.

Dave

Daniel Walsh wrote:

>In trying to get to know the HttpClient component a bit, I attempted to write a simple program using a Java Servlet and the HttpClient API - the end result being that the client make a post to the servlet and the servlet return a brief HTML response to the client.  The next step would be to transfer a file between the two, however, I'm running into some trouble with this first step.
>
>The only real requirements I've placed on this step is to use a post method instead of a get (because future steps would not be able to use a get), and to pass a parameter in the request.  The parameter is where my problems start.  After checking for this parameter on the server side, I throw an exception if it is non-existent.  This is as far as the program has been running for me.  
>
>I'm using HTTP Client 2.0 Alpha 2, and Commons Logging 1.0.2.  I've included a couple of example classes that represent the basics of my code, and the thrown exception, in case anyone might have an idea as to what I am doing wrong:
>
>_________________________________________________________________________________________________
>
>CLIENT CLASS -
>
>
>import org.apache.commons.httpclient.*;
>import org.apache.commons.httpclient.methods.*;
>
>import java.io.*;
>import java.net.*;
>
>public class HttpClientExmpl
>{
>
>    public HttpClientExmpl()
>    {
>        init();
>    }
>
>    public void init()
>    {
>        MultipartPostMethod postMethod = new MultipartPostMethod();
>        
>        postMethod.setPath("/servlet/HttpClientExmplServlet");
>        postMethod.addParameter("param-name", "param-value");
>        
>        HttpClient client = new HttpClient();
>        HostConfiguration hostConfig = new HostConfiguration();
>        
>        hostConfig.setHost("localhost", 8081, "http");
>        client.setConnectionTimeout(30000);
>        client.setHostConfiguration(hostConfig);
>
>        try
>        {
>            client.executeMethod(postMethod);
>        }
>        catch(HttpException httpEx)
>        {
>            httpEx.printStackTrace();
>        }
>        catch(IOException ioEx)
>        {
>            ioEx.printStackTrace();
>        }
>        
>        String responseString = postMethod.getResponseBodyAsString();
>        
>        postMethod.releaseConnection();
>        
>        System.out.println(responseString);
>    }
>    
>    public static void main(String args[])
>    {
>        new HttpClientExmpl();
>    }
>}
>
>
>_________________________________________________________________________________________________
>
>SERVLET CLASS -
>
>import javax.servlet.*;
>import javax.servlet.http.*;
>
>import java.io.*;
>
>public class HttpClientExmplServlet extends HttpServlet
>{
>    
>    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
>    {
>        String paramValue = request.getParameter("param-name");
>        
>        if(paramValue == null)
>            throw new ServletException(new NullPointerException("The getParameter call returned null."));
>
>        response.setContentType("text/html");
>        
>        PrintWriter writer = response.getWriter();
>        StringBuffer buf = new StringBuffer();
>            
>        buf.append("<HTML>\n");
>        buf.append("<HEAD>\n<TITLE>HTTP Client Example Application</TITLE>\n</HEAD>\n");
>        buf.append("<BODY>\n");
>        buf.append("The servlet received the parameter sent within the post method.\n");
>        buf.append("</BODY>\n");
>        buf.append("</HTML>");
>
>        writer.write(buf.toString());
>        writer.flush();
>        writer.close();
>    }
>}
>
>_________________________________________________________________________________________________
>
>RESULTING EXCEPTION -
>
>2003-01-27 21:08:27 StandardWrapperValve[HttpClientExmplServlet]: Servlet.service() for servlet HttpClientExmplServlet threw exception
>java.lang.NullPointerException: The getParameter call returned null.
>        at HttpClientExmplServlet.doPost(HttpClientExmplServlet.java:14)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
>        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
>        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:223)
>        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
>        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
>        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
>        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
>        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
>        at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
>        at org.netbeans.modules.web.monitor.catalina.MonitorValve.invoke(MonitorValve.java:142)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
>        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
>        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
>        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
>        at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
>        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
>        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
>        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
>        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
>        at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
>        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
>        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
>        at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
>        at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
>        at java.lang.Thread.run(Thread.java:536)
>
>
>
>Any suggestions would be greatly appreciated.
>
>Thanks,
>
>Daniel
>
>p.s. I'm not even sure that MultipartPostMethod is the most suitable object for this.  If not, I'd appreciate a point in the right direction.
>
>  
>