title: No suitable HttpMessageConverter found error while executing rest service that takes multipart parameters
body: <p>I am using Spring Integration in my project. I am trying to execute a rest service which takes multipart/formdata input parameters. I am using int-http:outbound-gateway to execute rest service. The following is the code:</p>
  
  <pre class="lang-xml prettyprint-override"><code>&lt;int:channel id="PQcreateAttachment-Rest-Channel" /&gt;
      &lt;int:chain input-channel="PQcreateAttachment-Rest-Channel"  output-channel="PQcreateAttachment-StoredProcedure-Router" &gt;
  
          &lt;int:header-filter  header-names="accept-encoding"/&gt;    
  
           &lt;int:service-activator  ref="httpOutboundGatewayHandler" method="buildMultipartHttpOutboundGatewayRequest" /&gt; 
  
          &lt;int-http:outbound-gateway  url-expression="headers.restResourceUrl"
                                      http-method-expression="headers.httpMethod"
                                      extract-request-payload="true"
                                      &gt;
          &lt;/int-http:outbound-gateway&gt;
  
          &lt;int:service-activator ref="msgHandler" method="buildMessageFromExtSysResponse" /&gt;
  
      &lt;/int:chain&gt;
  </code></pre>
  
  <p>But I am getting the following error when I execute the above code.</p>
  
  <pre><code>Caused by: org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.integration.message.GenericMessage] and content type [application/x-java-serialized-object]
      at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:665)
      at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481)
      at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:460)
      at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:409)
      at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:372)
      ... 121 more
  </code></pre>
  
  <p>Here is the java code that prepares my multipart request:</p>
  
  <pre class="lang-java prettyprint-override"><code>public Message&lt;?&gt; buildMultipartHttpOutboundGatewayRequest(Message&lt;?&gt; inMessage) throws Exception{
  
          logger.debug(" ************** buildMultipartHttpOutboundGatewayRequest Start *************************");
  
          String inMsgPayload = (String)inMessage.getPayload();
  
  
  
          SOAXml soaXml = parseSOAXml(inMsgPayload);
  
          String restURL      = null;
          String contentType  = null;
          String acceptHdr    = null;
          String userId = null;
          String password = null;
          String businessAreaName    = null;
          String typeName   = null;
          String attachmentLocation = null;
          String httpMethod = null;
          Message&lt;?&gt; outMessage = null;
          MessageHeaders inMsgHdrs = null;
          MessageBuilder&lt;?&gt; msgBuild = null;
  
          String authorization = null;
          //TODO: File location needs to be changed to standard one 
          String fileLocation = "C:\\source.xml";
              //if we reach here means, it is AWD system
              restURL     = getAwdSOAService(soaXml);
  
          Document document = XmlParserUtil.convertString2Document(inMsgPayload);
  
           userId = XmlParserUtil.getNodeValue(document,"//userId");
           password = XmlParserUtil.getNodeValue(document,"//PQcreateAttachment/password");
           businessAreaName     = XmlParserUtil.getNodeValue(document,"//businessAreaName");
           typeName = XmlParserUtil.getNodeValue(document,"//typeName");
           httpMethod = XmlParserUtil.getNodeValue(document,"//METHOD");
           attachmentLocation = XmlParserUtil.getNodeValue(document,"//attachmentLocation");
  
           //Construct source xml 
           //Creating document
             Document sourceDocument = DocumentHelper.createDocument();
           Element sourceInstance = sourceDocument.addElement("createSourceInstance");
           sourceInstance.addAttribute("xmlns", "http://www.dsttechnologies.com/awd/rest/v1");
           Element orderItem=sourceInstance.addElement("businessAreaName");
           orderItem.setText("SAMPLEBA");
           Element orderItemDesc=sourceInstance.addElement("typeName");
           orderItemDesc.setText("SAMPLEST");
          // create source xml file
          XmlParserUtil.createXMLFileUsingDOM4J(sourceDocument, fileLocation);
          authorization = getBasicAuthorization(userId,password);
  
          Resource source = new ClassPathResource(fileLocation);
          Resource attachment = new ClassPathResource(attachmentLocation);
  
  
          Map&lt;String, Object&gt; multipartMap = new HashMap&lt;String, Object&gt;();
          multipartMap.put("source", source);
          multipartMap.put("attachment", attachment);
          logger.info("Created multipart request: " + multipartMap);  
  
  
              inMessage = buildMessageForMultipart(multipartMap); 
  
  
          //  contentType = csProps.getHttpAwdContentTypeValue();
              acceptHdr   = csProps.getHttpAwdAcceptTypeValue() ;
          //  authorization = getBasicAuthorization(soaXml.getUserid(),decriptPassword(soaXml.getPassword()));
  
              inMsgHdrs = inMessage.getHeaders();
              msgBuild = MessageBuilder.withPayload(inMessage).copyHeaders(inMsgHdrs);
              msgBuild.removeHeader("Content-Encoding");
              msgBuild.removeHeader("accept-encoding");
              msgBuild.setHeader(csProps.getHttpUrlHdr(), restURL);
              msgBuild.setHeader(csProps.getHttpMethodHdr(), httpMethod);
              msgBuild.setHeader(csProps.getHttpAuthorizatonHdr(),authorization );
  //          msgBuild.setHeader(csProps.getHttpContentTypeHdr(), contentType);
  //          msgBuild.setHeader(csProps.getHttpAcceptTypeHdr(),acceptHdr);   
  
  
          outMessage = msgBuild.build();
  
          logger.debug(" ************** buildHttpOutboundGatewayRequest End*************************");
          logger.debug(outMessage);
          logger.debug(" ************************************************************************");
  
          return outMessage;
  
      }
  </code></pre>
  
  <p>Any ideas on what's wrong here?</p>