Ich schreibe einen Test-Client für einen Webservice. Es ist eine Netbeans 6.9.1 WebAnwendung mit JSF-Framework. Ich habe eine verwaltete Bohne, die den Webservice aufruft.
Alles funktionierte gut, bis ich einen Tippfehler im Namen meiner Bohnenklasse bemerkte. Er lautete serviceBean und ich habe es umbenannt in ServiceBean mit dem ersten Buchstaben in Großbuchstaben. Ich habe die sichere Umbenennungsfunktion von Netbeans verwendet und sowohl der Dateiname als auch die Klassensignatur wurden wie erwartet geändert.
Aber von da an hatte ich eine Menge Probleme, meine Anwendung auf Glassfish 3.0.1 laufen zu lassen.
Ich kann meine Anwendung aus Netbeans ohne Fehler erstellen (sogar mit "Clean & Build"). Aber wenn ich bereitstellen gibt es die folgende Meldung im Server-Protokoll:
WARNUNG: Error in annotation processing: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean)
WARNUNG: WEB9052: Unable to load class jsf.ServiceBean, reason: java.lang.ClassNotFoundException: jsf.ServiceBean
INFO: Mojarra 2.0.2 (FCS b10) für Kontext '/PidClient' wird initialisiert.
SCHWERWIEGEND: Unable to load annotated class: jsf.serviceBean, reason: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean)
INFO: Loading application PidClient at /PidClient
Ich habe ein Formular auf einer Facelet-Seite, das an meine verwaltete Bean übergeben wird. Das Formular wird trotz des oben genannten Fehlers geladen, aber wenn ich versuche, es zu übermitteln, erhalte ich den folgenden Fehler:
WARNUNG: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)
Es handelt sich also nur um einen Folgefehler, der durch den obigen NoClassDefFoundError verursacht wird.
Und jetzt kommt der seltsame Teil: Wenn ich mein Projekt baue, wird die Datei ServiceBean.class aber wenn ich das Projekt von Netbeans aus bereitstelle und dann in mein Bereitstellungsverzeichnis schaue, ist die Klasse umbenannt in serviceBean.class .
Es scheint, dass der Bereitstellungsprozess die Datei umbenennt.
Was ist das Problem? (Netbeans 6.9.1, Glassfish 3.0.1, Windows 7)
UPDATE: Es kommt noch besser: Ich habe ServiceBean.java in ServiceBean2.java umbenannt. Ergebnis: Wenn ich "Clean & Build" mache, enthält die War-Datei nur ServiceBean2.class. Wenn ich von NB aus bereitstelle, enthält das Build-Verzeichnis ServiceBean2.class. y serviceBean.class. Wie kann ich diesen Geist loswerden?