Getting an error message for HTTP post request for multiple-part-form data

101 Views Asked by At

I am trying to post an employee data to a client API and my post request does not reach to related API and I get a response like below. And also I have tried to post my request via an integration platform called Dell Boomi. Also my request doesn't have an empty field and all fields related to method are filled with data.

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"00-26ae8fec464638bc5764c2ad82af50b4-5cb4f78ff28030ac-00","errors":{"":["Failed to read the request form. Unexpected end of Stream, the content may have already been read by another component. "]}}

import java.util.Properties;
import java.io.InputStream;
import com.boomi.execution.ExecutionUtil;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.commons.net.util.Base64;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpHost;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.client.methods.HttpRequestBase;
import com.boomi.component.CertificateFactory as BoomiCertificateFactory;
import javax.net.ssl.SSLContext;
import com.boomi.execution.ExecutionManager;
import com.boomi.execution.ExecutionTask;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.config.RequestConfig.Builder;
import java.io.ByteArrayOutputStream;


ExecutionTask task = ExecutionManager.current;
SSLContext sslContextBoomi = BoomiCertificateFactory.getInstance(task.accountConfig).createSSLContext();

String url =  ExecutionUtil.getDynamicProcessProperty("url");
//String soapAction = ExecutionUtil.getDynamicProcessProperty("soapAction");
//String userName =  ExecutionUtil.getDynamicProcessProperty("UserName");
//String password =  ExecutionUtil.getDynamicProcessProperty("Password");
//String token =  ExecutionUtil.getDynamicProcessProperty("token");

//HttpHost proxy = new HttpHost("10.1.70.115", 8080, "http");


for( int i = 0; i < dataContext.getDataCount(); i++ ) {
    InputStream is = dataContext.getStream(i);
    Properties props = dataContext.getProperties(i);
    logger = ExecutionUtil.getBaseLogger();
    
    ByteArrayOutputSt`your text`ream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] data = new byte[1024];
    while ((nRead = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }        
    buffer.flush();
    byte[] byteArray = buffer.toByteArray();
    
    HttpPost httpPostRequest = new HttpPost(url);
    HttpClient client = createHttpClient(httpPostRequest,sslContextBoomi);
    
   //if( !"".equals(userName) &&  !"".equals(password)) {                   
    //  String userPassword = userName + ":" + password;
    //  byte[] encodeBase64 = Base64.encodeBase64(userPassword.getBytes("UTF-8"));
        
    //  httpPostRequest.addHeader("Authorization", "Basic "+ new String(encodeBase64));
    //}
    
    //sendRequest
    HttpEntity entity = new ByteArrayEntity(byteArray);
    httpPostRequest.setEntity(entity);
    
    //addHEader
    //httpPostRequest.addHeader("SOAPAction",soapAction);
    //httpPostRequest.addHeader("Content-Type","text/xml; charset=utf-8");
    //httpPostRequest.addHeader("Authorization", token);
    //httpPostRequest.addHeader("accept","text/plain")
    httpPostRequest.addHeader("Authorization", ExecutionUtil.getDynamicProcessProperty("token"));
    httpPostRequest.addHeader("Content-Type","multipart/form-data;charset=utf-8; boundary=testboundary");
    //httpPostRequest.addHeader("Content-Type","multipart/form-data");
    
    HttpResponse response = client.execute(httpPostRequest);      
    
    int responseCode = response.getStatusLine().getStatusCode();
    ExecutionUtil.setDynamicProcessProperty("HTTP_RES_CODE", responseCode.toString(), false);
    
    dataContext.storeStream(response.getEntity().getContent(), props);
}


protected static HttpClient createHttpClient(HttpRequestBase httpRequest, SSLContext sslContextParam) {
    HttpClient client = null;
    Builder builder = RequestConfig.custom();
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    
    //HttpHost proxy = new HttpHost("10.1.70.115", 8080, "http");
    //builder.setProxy(proxy);
    
   
    SSLContext sslContext = sslContextParam;
    httpClientBuilder.setSSLContext(sslContext);
    
    RequestConfig config = builder.build();
    httpRequest.setConfig(config);
        
    client = httpClientBuilder.build();
    
    return client;

}

Could you please help me for options to solve this problem or anyone who had overcome this problem before could share ideas with me

0

There are 0 best solutions below