2014-09-05 11 views
5

sto ottenendo l'eccezione java.lang.IllegalStateException: Already connected durante il tentativo di eseguire di eseguire un HTTPS GET richiesta con HttpsURLConnection API.java.lang.IllegalStateException: già collegato a setDoOutput

Di seguito riportiamo il codice:

HttpsURLConnection con = null; 

    try { 
     URL obj = new URL(url); 
     con = (HttpsURLConnection) obj.openConnection(); 

     con.setRequestMethod("GET"); 
     con.setRequestProperty("Authorization", header); 
     con.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); 
     String urlParameters = "schema=1.0&form=json&byBillingAccountId={EQUALS,[email protected]}"; 

     con.setDoOutput(true); 

     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 

     System.out.println("Response Code = " + responseCode); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(con.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 
     con.disconnect(); 
     //print result 
     System.out.println("Response = " + response.toString()); 


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if(con!=null) con.disconnect(); 
    } 

Non so perché sto ottenendo questo.

Qualche idea su come risolvere questo problema?

Stack Trace

java.lang.IllegalStateException: Already connected 
at java.net.URLConnection.setDoOutput(Unknown Source) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(Unknown Source) 
at com.comcast.ccp.xbo.testing.partnerdevices.AppTest.testReadProperties(AppTest.java:65) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200) 
at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:155) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212) 
at org.testng.internal.Invoker.invokeMethod(Invoker.java:707) 
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
at org.testng.TestRunner.privateRun(TestRunner.java:767) 
at org.testng.TestRunner.run(TestRunner.java:617) 
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
at org.testng.TestNG.run(TestNG.java:1057) 
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 
+0

Stack trace prega – StackFlowed

+0

aggiunta la traccia dello stack – user1356042

risposta

3

Secondo this question setDoOutput viene utilizzato per le richieste PUT e POST (che contengono una richiesta-entity-body). Quindi c'è un conflitto con il metodo di richiesta impostato manualmente GET.

Si sta utilizzando GET in modo che i parametri dell'URL siano impostati come in this question e si possa semplicemente rimuovere setDoOutput.

anche Content-Type non ha senso con GET-richieste (source)

+0

Grazie ... questo risolve il problema. Questo introduce un altro problema da risolvere e questo è impostare un'intestazione di autenticazione su questa httpsconnection. con.setRequestProperty ("Autorizzazione", intestazione) non sembra impostare l'intestazione. Qualche idea? – user1356042

+0

Forse rimuovere l'header Content-Type sbagliato/non necessario aiuta? – DaniEll

+0

rimosso, ma il server restituisce 401, il che significa che c'è un problema di autenticazione e l'intestazione non è impostata. – user1356042

Problemi correlati