【发布时间】:2011-08-23 08:59:38
【问题描述】:
我正在为 Web 服务编写测试客户端。这是一个使用 JSF 框架的 Netbeans 6.9.1 WebApplication。我有一个调用 web 服务的托管 bean。
一切正常,直到我注意到我的 bean 类名中有错字。它是 serviceBean,我将其重命名为 ServiceBean,首字母大写。我使用了 Netbeans 的安全重命名功能,文件名和类签名都按预期更改。
但从那时起,我在 Glassfish 3.0.1 上运行我的应用程序时遇到了很多麻烦。
我可以从 Netbeans 构建我的应用程序而不会出错(甚至是“清理并构建”)。但是如果我部署,服务器日志中会出现以下消息:
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)
更新: 变得更好:将 ServiceBean.java 重命名为 ServiceBean2.java。结果:如果我“清理并构建”war 文件仅包含 ServiceBean2.class。如果我从 NB 部署构建目录包含 ServiceBean2.class 和 serviceBean.class。如何摆脱这个鬼?
【问题讨论】:
-
尝试在您的 NB 项目的所有(配置)文件中搜索“serviceBean”(首字母小写)。一些 conf 文件可能包含这个旧名称。
-
Eclipse 在服务器上下文菜单中有一个 Clean 选项来解决这类问题。 Netbeans没有类似的东西吗?否则尝试手动删除 Glassfish 上的整个工作目录。我不会将此作为答案发布,因为我不详细了解 Netbeans 如何使用 Glassfish。
-
@BalusC 感谢 BalusC。 Netbeans 具有“清理和构建”功能,我也尝试过。我什至删除了整个项目文件夹并从头开始重新创建它(尽管具有相同的项目和上下文名称)。
-
@MockerTim 谢谢,我已经尝试过了,但没有成功。
-
一年前我在做同样的事情时遇到了类似的问题。看来我不得不转储我的本地副本并检查项目。我认为 Net Beans 将其缓存在某个地方。
标签: java netbeans jsf-2 glassfish glassfish-3