Kann nicht in die Klasse umgewandelt werden – sie befinden sich im unbenannten Modul des Ladeprogramms „App“.

Lesezeit: 4 Minuten

Benutzeravatar von Cisco
Cisco

Ich versuche, eine Bean aus Quellen zu erstellen, die von generiert wurden wsdl2java.

Jedes Mal, wenn ich versuche, meine Spring Boot-App auszuführen, erhalte ich die folgende Fehlermeldung:

Verursacht durch: java.lang.ClassCastException: Klasse org.apache.cxf.endpoint.ClientImpl kann nicht in Klasse com.xignite.services.XigniteCurrenciesSoap umgewandelt werden (org.apache.cxf.endpoint.ClientImpl und com.xignite.services.XigniteCurrenciesSoap sind im unbenannten Modul des Loaders ‘app’)

Ich bin mir nicht sicher, wie genau ich generierte Quellen als Modul in meine Spring Boot-Hauptanwendung aufnehmen soll.

Meine Verzeichnisstruktur ist:

├── build
│   └── generatedsources
│       └── src
│           └── main
│               └── java
│                   └── com
│                       └── xignite
│                           └── services
│      
└── src
    └── main
        ├── java
        │   └── io
        │       └── mateo
        │           └── stackoverflow
        │               └── soapconsumption
        └── resources
           └── wsdls

Relevante Systeminformationen:

openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
  • Spring Boot 2.1.2.RELEASE
  • Klasse 5.2

Ich habe das Projekt auch hier auf Github hochgeladen: https://github.com/ciscoo/soap-consumption-spring-boot

  • Ich bin mir bei wsdl hier nicht ganz sicher … aber haben Sie versucht, a hinzuzufügen module-info.java zu Ihrem Projekt und/oder stellen Sie sicher, dass das Modul, von dem Sie abhängen (für Klassen org.apache.cxf.endpoint.ClientImpl) wird im Modulpfad und nicht im Klassenpfad aufgelöst.

    – Namann

    5. Februar 2019 um 14:54 Uhr

  • Es gibt kein “Weil“ in der Fehlermeldung. Dieser Nachtrag sagt Ihnen nur, dass sich beide Klassen im selben Modul befinden, dem unbenannten Modul des Ladeprogramms „app“, was dem Leser hilft zu verstehen, dass dieses Problem völlig unabhängig von Modulen ist. ClientImpl ist einfach kein Untertyp von XigniteCurrenciesSoap; es ist ein gewöhnliches ClassCastException.

    – Holger

    10. Februar 2019 um 13:08 Uhr

  • In meinem Fall war es ein bisschen anders. Klassenumwandlungsausnahmen treten manchmal aufgrund des Konflikts zwischen verschiedenen Java-Versionen auf. In pom.xml habe ich festgelegt, dass “1.8 verwendet wird, aber in Intellje IDE habe ich die Verwendung von Java-Version 11 eingestellt. Nach dem Ändern der Java-Version von 11 auf 8 wurde das Problem für mich gelöst.

    – Saman Salehi

    13. Juni 2021 um 15:36 Uhr


  • Ich habe Kotlin neben Java verwendet, das Problem wurde einfach durch Neukompilieren der Kotlin-Klasse behoben

    – Harsch

    31. Mai um 7:58 Uhr

Ich hatte einen ähnlichen Fall, und (wie von @Holger im Kommentar erwähnt) sind die Modulinformationen in der Nachricht einfach irreführend – dies ist ein tatsächlicher Fall, in dem versucht wird, etwas auf etwas zu übertragen, das nicht dazu passt.

In deinem Fall, ClientImpl ist einfach kein Untertyp von XigniteCurrenciesSoap.

  • Ich hatte ein ähnliches Problem und dachte, es sei unmöglich, eine ClassCastException zu sein. Nachdem ich diese Antwort gefunden hatte, habe ich die Ausnahme noch einmal genau untersucht und es stellte sich heraus, dass ich von einer Oberklasse mit demselben Namen in einem anderen Paket erweitert wurde. Auch wenn es wie ein anderes Problem aussieht, handelt es sich tatsächlich um eine ClassCastException.

    – Maarten Meeusen

    19. Dezember 2019 um 10:04 Uhr

  • Als ich die Frage stellte, war ich mit Apache CXF noch ziemlich neu. Der Grund für die Klassenumwandlungsausnahme war, dass ich JaxWsClientFactoryBean anstelle von JaxWsProxyFactoryBean verwendet habe. Ersteres gibt ein ClientImpl zurück, während letzteres einen Proxy zurückgibt, den Sie umwandeln müssen. Ich arbeite an etwas Neuem für die Arbeit und erinnerte mich an diese Frage.

    – Cisco

    13. Januar 2021 um 4:39 Uhr


  • In meinem Fall versuche ich, List in List zu konvertieren und erhalte das gleiche Problem

    – cd491415

    17. Oktober 2021 um 22:08 Uhr

    Hotpot mit Krauts Benutzer-Avatar
    Eintopf mit Kraut

    Der Stacktrace versucht Ihnen mitzuteilen, dass Sie gecastet haben XigniteCurrenciesSoap zu ClientImpl.

    Wie das folgende Beispiel:

    Object returnObj= getXigniteCurrenciesSoap();
    return (ClientImpl) returnObj;
    

    Sie müssen herausfinden, wo Sie das in Ihrem Code getan haben, und es beheben.

    Ich hatte das gleiche Problem. Das Problem in meinem Fall war, dass ich an einem anderen Ort bereits eine Klasse mit demselben Namen hatte. Versuchen Sie also, den Klassennamen zu ändern.

    • Das beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie diese stellen, indem Sie auf Frage stellen klicken. Sie können benachrichtigt werden, wenn diese Frage neue Antworten erhält Folge dieser Frage. Sobald Sie genug Ruf haben, können Sie auch ein Kopfgeld hinzufügen, um mehr Aufmerksamkeit auf diese Frage zu lenken. – Aus Bewertung

      – Dan

      10. Mai um 18:59 Uhr

    Benutzeravatar von Sanjay Tank
    Sanjay-Panzer

    Ich wurde sehr ähnlich obige Ausnahme.

    java.lang.ClassCastException: Klasse [B cannot be cast to class org.apache.avro.generic.GenericRecord ([B is in module java.base of loader 'bootstrap'; org.apache.avro.generic.GenericRecord is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader 
    

    Root cause was my Gradle dependency had exclude statement, i.e.

    exclude group: 'org.springframework.cloud', module: 'spring-cloud-stram-binder-kafka',
    

    I commented it as below and things were working fine after that:

    implementation ('com.xyz.lux:lux-acitor:1.25.0') {
      //exclude group: 'org.springframework.cloud', module: 'spring-cloud-stream-binder-kafka'
      exclude group: 'org.slf4j', module: 'slf4j-reload4j'
      exclude group: 'io.confluent', module: 'confluent-log4j'
    }
    

    1436810cookie-checkKann nicht in die Klasse umgewandelt werden – sie befinden sich im unbenannten Modul des Ladeprogramms „App“.

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy