0

I have Written a java REST web service, which is accepting image file and json data what i am sending in header param, so i want to know how i can write a client to call that web service successfully. My problem is how i can pass image file and json data in header param to call that webservice. how i can set image in request.please find below code of rest webservice which i have to expose.

@Path("/KVBSvasth")
public class KvbSvasthWebServices {




    private static final String FILE_UPLOAD_PATH = "D:\\home"; 


    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/getKvbMemberDetails")
    public String saveClaimSubmissionMultiplePdf(@Context HttpServletRequest request,@HeaderParam("jsondataaa")String jsondata) throws Exception
    {


        WebServiceManager webServiceManager=null;
        try{
            KvbSvasthVO kvbSvasthVO=null;
            String msg="";
            String enrollmentID="";

            System.out.println("json Data get "+jsondata);


            //try{
                ObjectMapper mapper = new ObjectMapper();
                kvbSvasthVO= mapper.readValue(jsondata, KvbSvasthVO.class);

            //}catch(JsonParseException | JsonMappingException jsonexception){
            //  msg="Data parsing exception";
                //return this.getJsonOutputString(msg, enrollmentID);
            //}

            if (ServletFileUpload.isMultipartContent(request)) {
                final FileItemFactory factory = new DiskFileItemFactory();
                final ServletFileUpload fileUpload = new ServletFileUpload(factory);
                final List items = fileUpload.parseRequest(request);

                if(items.size()>0){
                if (items != null) {
                    System.out.println("its should 2");
                    final Iterator iter = items.iterator();
                    while (iter.hasNext()) {
                        System.out.println("its should 3");
                        final FileItem item = (FileItem) iter.next();
                        final String itemName = item.getName();
                        item.getFieldName();
                        item.getString();
                        String strFileExt = itemName.substring(itemName.lastIndexOf(".") + 1,itemName.length());
                        File folder = new File(FILE_UPLOAD_PATH);

                        webServiceManager=this.getWebServiceManagerObject();


                        //kvbSvasthVO.setFileDataOInputStream(item.getInputStream());
                    //  kvbSvasthVO.setImageFileSize((int)item.getSize());
                        //kvbSvasthVO.setJsonData(jsondata);

                        webServiceManager.saveKvbSvasthCustDetails(kvbSvasthVO,item,jsondata);


                        if (!folder.exists()) {
                            System.out.println("its should 4");
                            folder.mkdir();
                        } // End Of if(!folder.exists())
                        if (!(strFileExt.equalsIgnoreCase("pdf"))) {   
                            final File savedFile = new File(FILE_UPLOAD_PATH+ File.separator + itemName);
                            System.out.println("final file "+FILE_UPLOAD_PATH+ File.separator + itemName);
                            item.write(savedFile);
                        } 


                    break;
                    }//end of while (iter.hasNext())
                } // end of if (items != null) 

                }//end of if(items.size()>0)


            }

        }catch(Exception e){

            System.out.println("exception occurs: ");
            e.printStackTrace();
        }
        return jsondata;
    }


    public String getJsonOutputString(String message,String enrollementID){
        JSONObject jsobj = new JSONObject();
        LinkedHashMap<String, String> object = new LinkedHashMap();
        //object.put("status", status);
        object.put("msg",message);
        object.put("enrollemntId",enrollementID);
        jsobj.putAll(object);
        return jsobj.toJSONString();
    }


    private WebServiceManager getWebServiceManagerObject() throws TTKException
    {
        WebServiceManager webServiceManager = null;
        try
        {
            if(webServiceManager == null)
            {
                InitialContext ctx = new InitialContext();
                webServiceManager = (WebServiceManager) ctx.lookup("java:global/TTKServices/business.ejb3/WebServiceManagerBean!com.ttk.business.webservice.WebServiceManager");
            }//end if(webServiceManager == null)
        }//end of try
        catch(Exception exp)
        {
            throw new TTKException(exp, "webservice");
        }//end of catch
        return webServiceManager;
    }//end getWebServiceManagerObject()

}

Kindly Help, thanks.

Sangram Badi
  • 4,054
  • 9
  • 45
  • 78

2 Answers2

1

Using of header to pass the json data is the not the best practice - they should go to body. But let's suppose you have a good reason for that. In order to pass image you will need transform it to byte array first. Here is example how you can set header's values in java:

        HttpClient httpClient = HttpClients.createDefault()
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("jsondataaa", headerData);
        HttpEntity requestEntity = new ByteArrayEntity(requestContent);
        Path path = Paths.get("path/to/file"); 
        byte[] data =  Files.readAllBytes(path); 
        HttpEntity requestEntity = new ByteArrayEntity(data); 
        httpPost.setEntity(requestEntity);
        logXmlRequestResponse(requestContent, operationType + " Request");
        HttpResponse execute = httpClient.execute(httpPost);
        httpPost.releaseConnection();
GiorgosDev
  • 1,757
  • 1
  • 14
  • 16
  • But how i can set a image file in request to parse it accordingly the given webservice to parse it succesfully. and i am not passing image in header i am passing it in formData – rishabhkeshari123 Jun 14 '18 at 06:12
  • you can read file to byte array and then use it in request like this Path path = Paths.get("path/to/file"); byte[] data = Files.readAllBytes(path); HttpEntity requestEntity = new ByteArrayEntity(data); – GiorgosDev Jun 14 '18 at 06:22
0

ok I resloved.below client code works fine .

package client;

import java.io.File;
import java.util.Scanner;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;

public class RESTClient {

    public static void main(String args[]) throws Exception {
        File f = new File("C:/Users/Public/Pictures/Sample Pictures/Desert.jpg");
       sendFile(f);
    }
    public static void sendFile(File file) throws Exception 
    {
    String BASE_URL="http://10.1.4.126:8080/rest/KVBSvasth/getKvbMemberDetails";
        HttpClient client = new DefaultHttpClient() ;
        HttpPost postRequest = new HttpPost (BASE_URL) ;
        try
        {

            //Set various attributes 
            MultipartEntity multiPartEntity = new MultipartEntity() ;

           // multiPartEntity.addPart("fileName", new StringBody(file.getName() != null ? file.getName() : file.getName())) ;

            FileBody fileBody = new FileBody(file) ;
            //Prepare payload
            multiPartEntity.addPart("attachment", fileBody) ;

            //Set to request body
            postRequest.setEntity(multiPartEntity) ;

            Scanner sc = new Scanner(new File("C:/Users/rishabh.keshari/Desktop/json.txt"));

            postRequest.setHeader("jsondataaa",sc.nextLine());
            //Send request
            HttpResponse response = client.execute(postRequest) ;

            //Verify response if any
            if (response != null)
            {
                System.out.println(response.getStatusLine().getStatusCode());
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace() ;
        }
    }
}