2014-05-07 14 views
6

Ich habe diesen Code in meinem Netbeans 7.4 versucht und es funktioniert ohne Problemjava.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl kann nicht in javax.net.ssl.HttpsURLConnection umgewandelt werden

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(); 
    } 
} 

aber dann habe ich es in eclipse in meinem maven-driven Projekt und es wirft folgende Ausnahme:

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

Dies ist nach Klasse in meinem maven-Projekt, das einen Fehler wirft

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 
    }  
} 

Das ist mein 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> 

Jede Idee, warum es ohne Problem auf Netbeans laufen nicht kompiliert und warum es nicht gut auf Maven-Eclipse-Projekt gehen?

(I kompilieren über Kommandozeilen mvn package verwenden, ich es durch Eclipse laufen)

+0

Ich würde vermuten, dass es einen Unterschied in Ihrem Classpath. –

+0

Klassenpfad zu was genau? – libik

Antwort

11

Die Lösung ist diese Linie

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

in dieser Linie

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

Ich bekam dieselbe Ausnahme in der letzten Luna-Finsternis. Deine Lösung hat für mich funktioniert. – medloh

+3

Bitte verwenden Sie diese Lösung nicht. Es ist ein Workaround, indem Sie eine bestimmte Handlerimplementierung verwenden. Dies verhindert möglicherweise, dass Ihr Code auf einem anderen JRE/JDK (Hersteller und/oder Version) ausgeführt wird. Weitere Informationen hier: https://community.oracle.com/thread/1535882 und https://community.oracle.com/thread/1150553 – Gunnar

3

Statt sich ändern von:

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

verwenden:

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

fallen einfach die "s" in "Http s URLConnection"

+0

Danke, diese Lösung funktionierte für mich. – Aditya

+0

Sie sind willkommen, @Aditya –

-1

Es genannt, wenn url>

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

Verwendung netty-3.9.2 mit "https" beginnt. Jar, um dieses Problem zu lösen Wenn Sie diese netty.jar verwenden. der Prozess des Nachrufs hat sich geändert.

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

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Link-Only-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. –

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier anzugeben und den Link als Referenz anzugeben. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18218599) – yivi

Verwandte Themen