Shruti sharma
Shruti sharma

Reputation: 211

Consuming PATCH API in java(Earlier question have been removed)

I have to consume PATCH API in java. When I am trying to use in the below code it is giving exception

  java.net.ProtocolException: Invalid HTTP method: PATCH
    at java.net.HttpURLConnection.setRequestMethod(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(Unknown Source)
    at com.java.jackson.jackson.PatchRequest.main(PatchRequest.java:32)

this line in below code throwing the exception.

connection.setRequestMethod("PATCH");

I am using below code for the same.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;

public class PatchRequest {
    
    public static void main(String[] args)  {
        try {
            HttpURLConnection connection=null;
            String targetUrl="https://xxxxxxxxx-t0.data.digitalassistant.oci.oc-test.com/api/v1/bots/"+botID+"/dynamicEntities/"+dynamicEntityId+"/pushRequests/"+pushRequestId+"/values";
            URL url=new URL(targetUrl);
            connection=(HttpURLConnection) url.openConnection();
            connection.setUseCaches (false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestMethod("PATCH");
            connection.setRequestProperty("Content-Type","application/json");
            connection.setRequestProperty("Authorization","Bearer "+"eyJ4NXQjUzI1NiI6IjZhYnBycWVsRl9ld3NEaW1HRy0wY0JpNVg2N09jQjkzTGNyN2Y4M3UzLXMiLCJ4NXQiOiJkdlhSRXBGdXpTenRMdGlMM2Vmbk1rbVo0Rk0iLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MF9BUFBJRCIsInVzZXIudGVuYW50Lm5hbWUiOiJpZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJwcmltVGVuYW50Ijp0cnVlLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwiY2xpZW50X2lkIjoiaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDBfQVBQSUQiLCJjYV9ndWlkIjoiY2FjY3QtYzZkNjgxNDI5YzZiNGQyMTgzMzkwYWE2ZTczZGNmY2IiLCJhdWQiOiJodHRwczpcL1wvaWRjcy1vZGEtOTQxN2Y5MzU2MGI5NGViOGEyZTJhNGM5YWFjOWEzZmYtdDAuZGF0YS5kaWdpdGFsYXNzaXN0YW50Lm9jaS5vYy10ZXN0LmNvbSIsInN1Yl90eXBlIjoiY2xpZW50Iiwic2NvcGUiOiJcL2FwaVwvdjEiLCJjbGllbnRfdGVuYW50bmFtZSI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJleHAiOjE1OTM1NTU3MzQsImlhdCI6MTU5MzU1MjEzNCwidGVuYW50X2lzcyI6Imh0dHBzOlwvXC9pZGNzLTgyOTcyOTIxZTQyNjQxYjFiZjA4MTI4YzNkOTNhMTljLmlkZW50aXR5LmM5ZGV2Mi5vYzlxYWRldi5jb20iLCJjbGllbnRfZ3VpZCI6IjI2NTNlMTBjY2NiODQzMmFhNWIzMTEwYTllNTdmM2FjIiwiY2xpZW50X25hbWUiOiJpZGNzLW9kYS05NDE3ZjkzNTYwYjk0ZWI4YTJlMmE0YzlhYWM5YTNmZi10MCIsInRlbmFudCI6ImlkY3MtODI5NzI5MjFlNDI2NDFiMWJmMDgxMjhjM2Q5M2ExOWMiLCJqdGkiOiJkZDBjYTA5NC0wY2EyLTQ5YmUtYmEzYi1hYWJkMTBjNjIyY2IifQ.j2tQr_lS5DNwzRuttsDKxDMYoiGreFVfe-rs-TmRF1gN5VDmNcnKnw5WWh8yL73ixrNtoELbY5h7uRyB49vCMPHiUtIMRYL8yXGfn56VOJvxshQAVjfCrMyGS6FeTlnuR-4CLEwy_QYWXV3CX7JRN2cVbYapwS1Nex9KX0wrF-tMmgEEttBsQxDlc6BqwacCtFBVjKvZTyhucivjQCfMhFINeMtL3ktqs1e3_ztundyiWV6vjDgrGjVY5UatHLqdorTC0Q56GVi3OPIAKisDUAP7vtnaeuaLR9aARwPVDFLcY6gMjsOWMYCfAHkAZ7RBkuLsptxUc3czUXfqMLxqtw");
            connection.setRequestProperty("Accept", "application/json");
            OutputStream os = connection.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");    
            osw.write("\"{\\n    \\\"delete\\\": [\\n    \\n        {\\n            \\\"canonicalName\\\": \\\"FTE Discrete Org\\\"\\n        } \\n    ],\\n    \\\"modify\\\": [\\n        {\\n            \\\"canonicalName\\\": \\\"FTE Process Org\\\",\\n            \\\"synonyms\\\": [\\n                \\\"FTE Process Org\\\",\\\"FTE Process  Org\\\",\\\"fteprocessorg\\\"\\n            ]\\n        }\\n    ],\\n    \\n     \\\"add\\\": [        \\n\\n        {\\n            \\\"canonicalName\\\": \\\"Vision Canada\\\",\\n            \\\"synonyms\\\": [\\n                \\\"visioncanada\\\",\\n                \\\"vision  canada\\\",\\\"vision canada\\\"\\n            ]\\n        },\\n        {\\n            \\\"canonicalName\\\": \\\"apple computers\\\",\\n            \\\"synonyms\\\": [\\n                \\\"apple corp\\\",\\n                \\\"apple\\\"             \\n            ]\\n        }\\n    ]\\n}\"");
            osw.flush();
            osw.close();
            os.close(); 
            System.out.println("Code works before connect");

            connection.connect();
            
            System.out.println("Code works after connect");
            int responseCode=connection.getResponseCode();
            System.out.println("Response code:"+responseCode);
            if (responseCode==401) {
                System.out.println("Unauthorized Error");
            } else if(responseCode==200) {       
                InputStreamReader in=new InputStreamReader(connection.getInputStream());
                BufferedReader reader =new BufferedReader(in);
                String output;
                String apiOutput="";
                while((output=reader.readLine())!=null) {
                    apiOutput+=output;
                }
                System.out.println(apiOutput);  
                connection.disconnect();
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

I read in google and then I replaced the line which throws exception by below 2 lines.

connection.setRequestProperty("X-HTTP-Method-Override", "PATCH");
connection.setRequestMethod("POST");

then it throws Http status code 412. Can you please help me on the same.

Upvotes: 0

Views: 394

Answers (1)

Jocke
Jocke

Reputation: 2294

You will not be able to do that with java.net.HttpURLConnection see details in link below. You need to use the Client API in the java.net.http package.

Detail can be found here: https://bugs.openjdk.java.net/browse/JDK-8207840

Upvotes: 2

Related Questions