我正在为webservice编写测试客户端。它是使用JSF框架的Netbeans 6.9.1 WebApplication。我有一个托管bean来调用webservice。
一切正常,直到我注意到我的bean类名称中的拼写错误。它是 serviceBean ,我将其重命名为 ServiceBean ,首字母大写。我使用了Netbeans的安全重命名功能,文件名和类签名都按预期更改。
但从那时起,我在Glassfish 3.0.1上运行我的应用程序时遇到了很多麻烦。
我可以毫无错误地从Netbeans构建我的应用程序(甚至是“Clean& Build”)。但是,如果我部署,服务器日志中会出现以下消息:
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
我在facelet页面上有一个表单,将提交给我的托管bean。尽管出现上述错误,表单仍会被加载但如果我尝试提交它,我会收到以下错误:
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)
所以这只是由上面的NoClassDefFoundError引起的后续错误。
现在到了奇怪的部分: 如果我构建我的项目它会创建文件 ServiceBean.class ,但如果我从Netbeans部署项目然后查看我的部署目录,则该类将重命名为 serviceBean.class 。
部署过程似乎重命名该文件。
有什么问题? (Netbeans 6.9.1,Glassfish 3.0.1,Windows 7)
UPDATE:它变得更好:将ServiceBean.java重命名为ServiceBean2.java。结果:如果我“清理并构建”,war文件只包含ServiceBean2.class。如果我从NB部署,则构建目录包含ServiceBean2.class 和 serviceBean.class。我怎么摆脱这个鬼?
答案 0 :(得分:14)
我能够复制这个问题的变体。我不得不clear the NetBeans compilation cache(似乎在操作系统上存在问题,这些问题是宽容的......)
为了解决我遇到的问题,我不得不:
停止服务器
清理项目
停止NetBeans
删除%HOME%.netbeans \ 6.9 \ var \ cache
启动NetBeans
当我运行遇到问题的项目时,NetBeans重新编译了项目,启动了服务器并打开了index.xhtml。之后我能够成功浏览应用程序。
我已打开http://netbeans.org/bugzilla/show_bug.cgi?id=198565来跟踪问题。请监控该问题并添加您认为可以帮助尝试解决问题的人的任何信息。
答案 1 :(得分:0)
我遇到了与NetBeans 7.3非常相似的问题,这意味着它仍然没有修复。它发生在重命名和删除实体类之后,JPA拒绝相信该类已被删除,因此我无法部署到Glassfish。
花了我很多时间,从重新启动NetBeans和Glassfish到实际重新安装它们。事实证明重新安装NetBeans并不会清除它的缓存,而这就是问题所在。
当我运行OS X时,我在〜/ Library / Caches / NetBeans中执行了以下操作:
$ grep -r MyDeletedEntity *
热潮,很少有人提到我删除的课程!
然后我继续删除该文件夹中的内容,重新启动NetBeans,然后再次部署到Glassfish。现在它有效!
如果这不起作用,也请查看 / Applications / NetBeans / NetBeans {whateverversion} .app / Contents / Resources / NetBeans / nb / var / cache并删除该文件夹中的所有内容。
答案 2 :(得分:0)
太晚了,但可能会帮助别人。我刚刚意识到JRebel保留了对旧名称的引用。我为我的项目禁用了JRebel,清理和构建+运行并且问题就消失了。