Zum Inhalt springen

WS Exceptions


DonUschi

Empfohlene Beiträge

Moin,

bin grad ein wenig Ratlos bezüglich des Verhaltens meiner Webservice Schnittstelle.

Wenn ich lokal aufm Server deploye bekomme ich in SOAPUI wunderbar meine Selbstdefinierten Exceptions zurück.

Wenn ich auf unserem Testserver deploye bekomm ich nur n leeren Response. Im Serverlog steht dann was von SOAPFault und SOAP Exception.

Kann damit jemand was anfangen?

Gruß,

Uschi

Bearbeitet von DonUschi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte verwende die Uploadfunktion des Boards.

Was mir direkt ins Auge springt, wenn ich den Trace lese:

de.projectbla.backend.core.service.UserCoreException: Permission denied.

Wobei es nun schwer wird, eine sinnvolle Interpretation zu finden, da wir das Projekt und die Systeme nicht kennen. Letztendlich besagt die Meldung, dass eben nicht genügend Rechte existieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

genau, das ist auch gut so, es soll ne Exception geschmissen werden. Das passiert auch, doch SOAP kann daraus keine Exception machen die nu als Response verschickt wird. Lokal klappt das! Da bekomm ich als Response ganz korrekt die UserCoreException - permission denied.

Vom Testserver bekomm ich nen 0Byte Response und in den Serverlogs findet sich das eben geastete.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das passiert auch, doch SOAP kann daraus keine Exception machen die nu als Response verschickt wird.

Lokal klappt das!

Ich kann hier nur blind raten: Wenn Du lokal testest benutzt Du den gleichen Klassenstamm, d.h. beide Komponenten greifen auf identische Klassen zu. Wenn Du das über das Netz machst, weiß eben der Sender nicht, wie er mit der Exception umzugehen hat, d.h. eine Exception ist auch "nur" ein Objekt, wenn Du das aber über das Netz versenden willst, musst Du es serialisieren, d.h. Du musst Serializable für Deine eigenen Exceptions implementieren und natürlich müssen sowohl Sender wie Empfänger über die Exceptionklassen verfügen.

Ist leider nur eine Vermutung, es fehlt halt wenn ein passender Codeauszug. Da aber die Exception im lokalen Fall geworfen wird, würde ich einfach darauf tippen, dass sie nicht übertragen wird.

edit: Natürlich muss alles was an der Exception hängt auch serialisiert werden, damit man sie vollständig wieder herstellen kann

Bearbeitet von flashpixx
edit
Link zu diesem Kommentar
Auf anderen Seiten teilen

meine exception erbt von exception welches serializable implementiert. ne sid gibts auch und die exception wird natürlich über die wsdl bekannt gemacht, sonst würd das lokal ja auch garnicht funktionieren.

ich greif ja auch mit nem client auf meinen lokalen jboss zu. die haben nix miteinander am hut, von wegen gleiche code basis usw.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

ich würde ähnlich wie flashpixx auf ein Classpath-Problem tippen. Mich hat aber eher die folgende Zeile stutzig gemacht:

Caused by: java.lang.IllegalStateException: Failed to load javax.xml.soap.MessageFactory:

Gibt es noch weitere "Caused by:"-Angaben im Log bei diesem Fehler?

Schöne Grüße,

Peter

Edith hat grad noch was dazwischengerufen: vielleicht ist es kein Classpath-, sondern ein Classloader-Problem. Die o.g. Klasse javax.xml.soap.MessageFactory ist ab JDK 6 im JDK enthalten, davor war sie in der EE-API mit dabei. Vielleicht sendet der Server eine Version, die der Client nicht (nicht mehr) kennt.

Bearbeitet von kingofbrain
Link zu diesem Kommentar
Auf anderen Seiten teilen

Fang doch einmal die Exception, die KingOfBrain genannt hat, ab und suche wo sie in Deinem Code genau auftritt.

Ich hatte ein ähnliches Problem mit der Annotation Definition meiner Klassen, die durch ein XSD Schema erzeugt wurden. Es lag ein Versionskonflikt bei den generierten Klassen vor, die neueren Komponenten konnten mit den alten Klassen nichts anfangen und umgekehrt. Ich meine die Fehlermeldung war sogar die gleiche. Bei mir trat die Exception nur auf, sobald eine ein Unmarshall auf die XML Daten gemacht wurde, geworfen wurde aber eine Exception aus dem Parser. Ich bin nach langer suche eben auf die Bemerkung in der Doku mit den Annotations gestoßen. Klassen einmal neu erstellt und es lief dann direkt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

bin nochmal euren ratschlägen nachgegangen. habe debuggt.

message factory wird lokal 2 mal benutzt.

ich hatte euch eine fehlinfo gegeben. jdk6 und javaee-api5 wird genutzt. das heißt das ganze ist doppelt vorhanden. beim debuggen hab ich dann gesehen, dass doch tatsächlich beide klassen genutzt werden!

wo ich überhaupt nicht drauf klar komme (das ist wohl das schöne thema classloading): com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

soll in der message factory geladen werden. tjo wenn ich dann aber mal debugge, sehe ich was? org.jboss.ws.core.soap.MessageFactoryImpl aus jboss/client/jbossws-native-core.jar

Link zu diesem Kommentar
Auf anderen Seiten teilen

warum die MessageFactory nu aus JDK und javaee-api im stacktrace vorkommen weiss ich imme rnoch nicht.

wohl aber warum es nun geht. der remote server wurde gestartet mit:

-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl

Da kann der JBoss dann natürlich nicht die Implementierung finden die der JBoss mitbringt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine (nicht formulierte) Frage zum Classloading war wahrscheinlich folgende: Warum meckert die Runtime wegen der Klasse, die heißt doch genau so? Der Grund (den wir Entwickler gerne verdrängen), ist, dass eine Klasse zur Laufzeit durch ihren vollqualifizierten Namen *und* den Classloader definiert ist. Da man bei Java EE mit dem Classloading im spezifizierten Standardfall vom Parent First Ansatz aus Java SE abweicht (damit jedes Archiv seine eigenen Klassen mitbringen kann, ohne mit anderen Archiven zu kollidieren), kann es hier beim Optimieren (macht der JBoss gerne und weicht damit auch in der Grundkonfiguration von der Java EE Spec ab) zu Classloadingfehlern kommen.

Aber hier hilft wirklich die genaue Beschäftigung mit Classloading allgemein und im JBoss im Speziellen. Dauert zwar ein bisschen, bis man es geblickt hat, aber es lohnt sich.

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...