Webservice java gibt.lang.reflektieren.InvocationTargetException
Erhalte ich die obige Meldung, wenn eine Anfrage an ein java-webservice.
Wir ursprünglich erstellt eine Java-Konsolenanwendung, und manuell übermittelt eine xml-Datei. Beim ausführen dieser wird als Java-Applikation die Reaktion ist erfolgreich erstellt und angezeigt werden, mithilfe von System.aus.println. Wir erstellen die web-service-von der Auswahl der java-Datei, enthält der Methoden und der Auswahl von "erstellen von webservice -" festlegen der dynamischen Projekt, die der webservice erstellt werden und die Methoden ausgesetzt werden.
Was die Anwendung tut, ist die Einnahme einer xml-Datei und unmarshalling es sich hierbei um ein Objekt mit:
public static Object unmarshalToObject(Class classToBeBound,
String xmlRequest) {
Object obj = new Object();
try {
JAXBContext jc = JAXBContext.newInstance(classToBeBound);
Unmarshaller um = jc.createUnmarshaller();
obj = um.unmarshal(new StringReader(xmlRequest));
} catch (Exception e) {
e.printStackTrace()
}
return obj;
}
Einige die Verarbeitung erfolgt auf die Datei und dann ein Objekt gemarshallt zu xml wie folgt:
public static String marshalToXML(Object data) {
StringWriter sw = new StringWriter();
try {
logger.info("Create new Marshall");
JAXBContext jc = JAXBContext.newInstance("ContextPathName");
logger.info("Marshalled to xmlObjects");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(data, sw);
} catch (Exception e) {
logException(logger, e);
}
return sw.toString();
}
Folgenden ist die Codezeile, die scheint zu sein, verursacht ein Problem, da der logger zeigt die Meldung vor:
JAXBContext jc = JAXBContext.newInstance("ContextPathName");
Den webservice wird nie in die nächste Zeile - das folgende ist der Körper der SOAP-Nachricht:
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.reflect.InvocationTargetException</faultstring>
<detail>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">servername</ns1:hostname>
</detail>
</soapenv:Fault>
Habe ich ein Try/Catch um diesen code-Abschnitt, der sogar so weit wie der Suche nach JAXBExceptions aber dies scheint nicht zu fangen nichts - auch nicht die Allgemeine Ausnahme.
Dieses Problem tritt nicht beim ausführen der Konsolenanwendung. Der build-Pfad für dies umfasst die folgenden Inhalte sun\jwsdp-2.0\jaxb\lib:
jaxb-api.jar
jsr173_1.0_api.jar
jaxb-impl.jar
Habe ich Hinzugefügt, werden diese zu den lib-Ordner in das WEB-INF-Datei des dynamischen Projekt.
Mir läuft der webservice in JBuilder 2008 R2 und mit SOAPUI, um die Anfrage - dies verweist auf die wsdl generiert beim erstellen des webservice.
Wenn jemand keine Hilfe oder Ideen, wie dieses Problem zu lösen, könnten Sie bitte Antwort - danke für die Zeit nehmen diesen Beitrag zu Lesen!
Haben Sie jemals Ihr Problem lösen?
InformationsquelleAutor Damian | 2010-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin gerade ganz ähnlich wie dir, wobei in einigen XML über SOAP und Einweisung in Objekte. Dies ist nicht unbedingt im Zusammenhang mit dem problem.
Den InvocationException geworfen wird, wenn es ein problem mit dem laufen einige Java-code, der in der Achse bei der Bearbeitung der Anfrage. Müssen Sie einige zusätzliche Optionen, um Zugriff auf log-Ausgabe von der Achse selbst. Sobald Sie diese Ausgabe, Sie werden mehr als wahrscheinlich sehen, eine Ausnahme, die wird für Euch Sinn machen (in meinem Fall war ich mit einer Klasse die ich noch nicht auf meinen server-classpath).
Grundsätzlich müssen Sie einen LogHandler zu Ihrem WSDD-Datei. Die folgende Seite hat ein gutes howto, was Sie brauchen in der WSDD. Aber diese Seite spricht über die client-config.wsdd für eine Achse-client, ich bin in der Erwägung, dass die Bündelung Achse in mein OHR und machte die änderungen an der server-config.wsdd.
http://www.theserverside.com/discussions/thread.tss?thread_id=35765
Auf dieser Seite hat Informationen spezifischeren Tomcat
Beachten Sie, dass der Speicherort der Achse.anmelden kann variieren, abhängig von Ihrem server und OS. Einige Leute berichten, es erscheint im System32-Verzeichnis von Windows, der 2. link sagt, es wird angezeigt, in das bin/- Verzeichnis von Tomcat. In meinem Fall (Mac OS X, Glassfish 2.1.1) es stellte sich bis in das config/- Verzeichnis meiner domain.
InformationsquelleAutor Rónán Ó Braonáin
Habe ich vor kurzem erlebt dieses Problem. Dies geschieht, wenn wir nicht in der Lage zu finden, die entsprechenden java-code auf dem server, den wir zeigen.
Hier sind ein paar Möglichkeiten, die Sie Aussehen könnte, in :
•Die richtige JAR-Datei existiert nicht auf dem server
•Die WSDL-und die anschließende Jar-Datei auf dem Server wurde aktualisiert und die WSDLconsumed ist NICHT die neueste
•Es sind mehrere jar-Dateien des gleichen
geben Sie in den JAR Ordner. In den meisten Fällen Benutzer benennen Sie Ihre alten JAR
Dateien, bevor Sie die aktualisierte JAR-Dateien. Das sollte NICHT sein
getan, als den richtigen Methoden werden nicht abgeholt. So loszuwerden, ALLE
unnötige JAR-Dateien vom SERVER. siehe unten
InformationsquelleAutor Light Yagami