You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Karl Heinz Marbaise <ka...@soebes.de> on 2010/12/10 08:57:56 UTC

HttpComponents 4.0.1 - POST + File Transfer + Form

Hi to all,

I have the following  http://imagebin.ca/view/vt_QBTQ6.html form   which i
like to post data to...and i have the following code:

        DefaultHttpClient httpClient = new DefaultHttpClient();
        String triggerJobUrl = getHudsonURL() + "/job/" + jobName +
"/build";

        HttpPost httppost = new HttpPost(triggerJobUrl);

        FileBody fileBody = new FileBody(releaseProperties,
"application/octet-stream");
        StringBody stringBody = new StringBody(svnURL.toString());

        MultipartEntity mentity = new
MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        mentity.addPart("file0", fileBody);
        mentity.addPart("SVNURL", stringBody);
        httppost.setEntity(mentity);

        HttpResponse response = null;

        try {
            response = httpClient.execute(httppost);
        } catch (ClientProtocolException e) {
            throw new HudsonException("http protocol error.", e);
        } catch (IOException e) {
            throw new HudsonException("connection aborted.", e);
        }

        if (response.getStatusLine().getStatusCode() != 200) {
            throw new HudsonException("Unexpected status code received " +
response.getStatusLine().getStatusCode());
        }

        HttpEntity resEntity = response.getEntity();

        if (resEntity != null) {
            try {
                resEntity.consumeContent();
            } catch (IOException e) {
                throw new HudsonException(
                        "if an I/O error occurs. This indicates that
connection keep-alive is not possible.", e);
            }
        }

I'm using the following dependencies in my project:
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.0.1</version>
        </dependency>


The problem with the above code is that i always get the following message
from the Server (Hudson):
SEVERE: Servlet.service() for servlet Stapler threw exception
java.lang.Error: This page expects a form submission
	at org.kohsuke.stapler.RequestImpl.getSubmittedForm(RequestImpl.java:769)
	at
hudson.model.ParametersDefinitionProperty._doBuild(ParametersDefinitionProperty.java:116)
	at hudson.model.AbstractProject.doBuild(AbstractProject.java:1479)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:282)
	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:149)
	at
org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:88)
	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:102)
	at
org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:562)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:640)
	at org.kohsuke.stapler.MetaClass$7.doDispatch(MetaClass.java:242)
	at
org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:562)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:640)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:478)
	at org.kohsuke.stapler.Stapler.service(Stapler.java:160)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:94)
	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:86)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:47)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at
hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
	at
hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)

The point is that i have a running example via command line (CURL) which
works perfectly:
curl -i   -Ffile0=@release.properties -Fjson='{"parameter": [{"name":
"trunk/release.properties", "file": "file0"}, {"name" : "SVNURL" , "value"
:"http://xxx.yyy.zzz.aaaa/svn/test/xxxx"}]}' -FSubmit=Build 
'http://aaa.bbb.ccc.ddd:8080/job/maven-changes-checker-parameter/build'

May be someone can give me hint or a suggestion about that problem?

Many thanks in advance
Kind regards
Karl Heinz Marbaisea
-- 
View this message in context: http://old.nabble.com/HttpComponents-4.0.1---POST-%2B-File-Transfer-%2B-Form-tp30424118p30424118.html
Sent from the HttpClient-User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Re: HttpComponents 4.0.1 - POST + File Transfer + Form

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Thu, 2010-12-09 at 23:57 -0800, Karl Heinz Marbaise wrote:
> Hi to all,
> 
> I have the following  http://imagebin.ca/view/vt_QBTQ6.html form   which i
> like to post data to...and i have the following code:
> 
>         DefaultHttpClient httpClient = new DefaultHttpClient();
>         String triggerJobUrl = getHudsonURL() + "/job/" + jobName +
> "/build";
> 
>         HttpPost httppost = new HttpPost(triggerJobUrl);
> 
>         FileBody fileBody = new FileBody(releaseProperties,
> "application/octet-stream");
>         StringBody stringBody = new StringBody(svnURL.toString());
> 
>         MultipartEntity mentity = new
> MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
>         mentity.addPart("file0", fileBody);
>         mentity.addPart("SVNURL", stringBody);
>         httppost.setEntity(mentity);
> 
>         HttpResponse response = null;
> 
>         try {
>             response = httpClient.execute(httppost);
>         } catch (ClientProtocolException e) {
>             throw new HudsonException("http protocol error.", e);
>         } catch (IOException e) {
>             throw new HudsonException("connection aborted.", e);
>         }
> 
>         if (response.getStatusLine().getStatusCode() != 200) {
>             throw new HudsonException("Unexpected status code received " +
> response.getStatusLine().getStatusCode());
>         }
> 
>         HttpEntity resEntity = response.getEntity();
> 
>         if (resEntity != null) {
>             try {
>                 resEntity.consumeContent();
>             } catch (IOException e) {
>                 throw new HudsonException(
>                         "if an I/O error occurs. This indicates that
> connection keep-alive is not possible.", e);
>             }
>         }
> 
> I'm using the following dependencies in my project:
>         <dependency>
>             <groupId>org.apache.httpcomponents</groupId>
>             <artifactId>httpclient</artifactId>
>             <version>4.0.1</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.httpcomponents</groupId>
>             <artifactId>httpcore</artifactId>
>             <version>4.0.1</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.httpcomponents</groupId>
>             <artifactId>httpmime</artifactId>
>             <version>4.0.1</version>
>         </dependency>
> 
> 
> The problem with the above code is that i always get the following message
> from the Server (Hudson):
> SEVERE: Servlet.service() for servlet Stapler threw exception
> java.lang.Error: This page expects a form submission
> 	at org.kohsuke.stapler.RequestImpl.getSubmittedForm(RequestImpl.java:769)
> 	at
> hudson.model.ParametersDefinitionProperty._doBuild(ParametersDefinitionProperty.java:116)
> 	at hudson.model.AbstractProject.doBuild(AbstractProject.java:1479)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:282)
> 	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:149)
> 	at
> org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:88)
> 	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:102)
> 	at
> org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
> 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:562)
> 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:640)
> 	at org.kohsuke.stapler.MetaClass$7.doDispatch(MetaClass.java:242)
> 	at
> org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
> 	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:562)
> 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:640)
> 	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:478)
> 	at org.kohsuke.stapler.Stapler.service(Stapler.java:160)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:94)
> 	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:86)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:47)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at
> hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
> 	at
> hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
> 	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> 	at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> 	at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> 	at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> 	at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
> 	at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
> 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> 	at java.lang.Thread.run(Thread.java:662)
> 
> The point is that i have a running example via command line (CURL) which
> works perfectly:
> curl -i   -Ffile0=@release.properties -Fjson='{"parameter": [{"name":
> "trunk/release.properties", "file": "file0"}, {"name" : "SVNURL" , "value"
> :"http://xxx.yyy.zzz.aaaa/svn/test/xxxx"}]}' -FSubmit=Build 
> 'http://aaa.bbb.ccc.ddd:8080/job/maven-changes-checker-parameter/build'
> 
> May be someone can give me hint or a suggestion about that problem?
> 
> Many thanks in advance
> Kind regards
> Karl Heinz Marbaisea

Turn on wire logging [1] to capture the HTTP message generated by
HttpClient and use wire shark or similar tool to capture that generated
by CURL. Compare and adjust your HttpClient configuration.

[1] http://hc.apache.org/httpcomponents-client-ga/logging.html



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org