Ich erhalte die obige Meldung, wenn ich eine Anfrage an einen Java-Webservice stelle.
Ursprünglich haben wir eine Java-Konsolenanwendung erstellt und manuell eine xml-Datei übermittelt. Wenn wir dies als Java-Anwendung ausführen, wird die Antwort erfolgreich erstellt und mithilfe von System.out.println angezeigt. Wir erstellen den Webdienst, indem wir die Java-Datei auswählen, die die Methoden enthält, und "create webservice" wählen, wobei wir das dynamische Projekt angeben, in dem der Webdienst erstellt werden soll, sowie die Methoden, die ausgesetzt werden sollen.
Was die Anwendung tut, ist eine xml-Datei zu nehmen und unmarshalling diese zu einem 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;
}
Die Datei wird verarbeitet, und anschließend wird ein Objekt wie folgt in xml umgewandelt:
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();
}
Die folgende Codezeile scheint ein Problem zu verursachen, da der Logger die Meldung vor dieser Zeile anzeigt:
JAXBContext jc = JAXBContext.newInstance("ContextPathName");
Der Webservice kommt nie zur nächsten 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>
Ich habe Try/Catch um diesen Codeabschnitt herum hinzugefügt und sogar nach JAXBExceptions gesucht, aber das scheint nichts abzufangen - auch nicht die allgemeine Ausnahme.
Dieses Problem tritt nicht auf, wenn die Konsolenanwendung ausgeführt wird. Der Build-Pfad für diese Anwendung enthält den folgenden Inhalt von sun \jwsdp -2.0 \jaxb\lib :
jaxb-api.jar
jsr173_1.0_api.jar
jaxb-impl.jar
Ich habe sie dem Ordner lib in der WEB-INF-Datei des dynamischen Projekts hinzugefügt.
Ich führe den Webservice in JBuilder 2008 R2 aus und verwende SOAPUI, um die Anforderung zu übermitteln - dies verweist auf die wsdl, die beim Erstellen des Webservice generiert wurde.
Wenn jemand Hilfe oder Ideen hat, wie man das Problem lösen kann, bitte antworten - danke, dass Sie sich die Zeit genommen haben, diesen Beitrag zu lesen!