2014-05-07 15 views
6

Ho provato questo codice nel mio Netbeans 7.4 e funziona senza problemijava.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl non può essere lanciato su javax.net.ssl.HttpsURLConnection

import java.io.IOException; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

public class JavaApplication148 { 
    public static void main(String[] args) throws IOException { 
     URL url = new URL("https://redmine.ackee.cz/time_entries.xml"); 
     HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection(); 
    } 
} 

Comunque poi ho usato in Eclipse nel mio progetto Maven-driven e getta seguente eccezione:

java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl 
cannot be cast to javax.net.ssl.HttpsURLConnection 

Questo sta seguendo classe nel mio progetto Maven che genera un errore

package cz.ackee.redmine.commands; 

import java.io.IOException; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

public abstract class RedmineCommand {  
    public void write(String xmlAddress, String text, String requestMethod) throws IOException{   
     URL url = new URL("https://redmine.xxx.cz/time_entries.xml"); 
     HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection(); //this line throws exception 
    }  
} 

Questo è il mio pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>cz.ackee</groupId> 
    <artifactId>pan-unicorn-bot</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>Pan Unicorn Bot</name> 
    <description>Pan unicorn IRC Bot</description> 

    <repositories> 
    <repository> 
    <id>apache-snapshots</id> 
    <url>http://repository.apache.org/snapshots/</url> 
    </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.30</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.5.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-cli</artifactId> 
      <version>1.3-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.taskadapter</groupId> 
      <artifactId>redmine-java-api</artifactId> 
      <version>1.23</version> 
     </dependency> 
    </dependencies> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <groupId>org.apache.maven.plugins</groupId> 
       <version>2.3</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.2.1</version> 
       <configuration> 
        <descriptors> 
         <descriptor>/src/main/assembly/binary.xml</descriptor> 
        </descriptors> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>cz.ackee.unicorn.PanUnicornMain</mainClass> 
         </manifest> 
         <manifestEntries> 
          <mode>development</mode> 
          <url>${project.url}</url> 
          <key>value</key> 
         </manifestEntries> 
        </archive> 
       </configuration> 

      </plugin> 
     </plugins> 
    </build> 

</project> 

Qualsiasi idea, perché lo fa compilare ed eseguire senza problemi su NetBeans e perché non va bene il progetto di Maven-eclipse?

(compilo attraverso la linea di comando utilizzando mvn package, corro attraverso eclisse)

+0

Direi che c'è una differenza nel classpath. –

+0

classpath to what esattamente? – libik

risposta

11

La soluzione è cambiare questa linea

URL url = new URL("https://redmine.xxx.cz/time_entries.xml"); 

in questa linea

URL url = new URL(null, "https://redmine.xxx.cz/time_entries.xml", new sun.net.www.protocol.https.Handler()); 
+0

Stavo ricevendo la stessa eccezione nell'ultima eclissi di luna. La tua soluzione ha funzionato per me. – medloh

+3

Si prega di non utilizzare questa soluzione. È una soluzione alternativa utilizzando un'implementazione specifica del gestore. Ciò impedisce potenzialmente l'esecuzione del codice su un JRE/JDK diverso (fornitore e/o versione). Maggiori informazioni qui: https://community.oracle.com/thread/1535882 e https://community.oracle.com/thread/1150553 – Gunnar

3

Anziché:

Htt psurLConnection httpCon = (HttpsURLConnection) url.openConnection();

Utilizzare questa:

HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();

Basta inserire il "s" in "Http s URLConnection"

+0

Grazie, questa soluzione ha funzionato per me. – Aditya

+0

Siete i benvenuti, @Aditya –

-1

Si chiama se l'URL inizia con "https"

if(url.startswith("https"){ HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection(); } 

uso Netty-3.9.2>. jar per risolvere questo problema Quando si utilizza questo netty.jar. il processo di post chiamata è cambiato.

http://dl.bintray.com/netty/downloads/netty-3.9.12.Final.tar.bz2

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte al solo collegamento possono diventare non valide se la pagina collegata cambia –

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18218599) – yivi