Reputation: 211
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
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