我试图在Java5上编译由IBM的WSDL2Java创建的Java1.4代码,而不重新创建存根,并在Eclipse中看到了这个错误。我的假设是,只要运行时jar可用(它们可用),生成的存根就应该编译。

访问限制:由于对所需库C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar的限制,QName类型不可访问

完整类名为javax.xml.namespace.QName

这里到底发生了什么?这是我试图用香肠重构猪的例子吗?我最好重新创建存根吗?


当前回答

转到项目财产中的Java构建路径。删除现有的JRE系统库然后再次添加,即添加库-->JRE库-->选择JRE-->完成。最后选择order和export选项卡,选择JRE Lib并移至顶部。就是这样。

其他回答

我也有这个问题。显然,我在构建路径中将JRE设置为1.5而不是1.6。

转到项目财产中的“生成路径”设置。Windows->首选项->Java编译器删除JRE系统库添加另一个具有“完美匹配”的JRE清理并重新构建项目。这对我有用。

对我来说,我是这样解决的:

转到当前项目的生成路径

在库下

选择“JRE系统库[jdk1.8xxx]”单击“编辑”并选择“工作区默认JRE(jdk1.8xx)”或“备用JRE”单击“完成”单击“确定”

注意:确保在Eclipse/Preferences(而不是项目)/Java/Installed JRE中,jdk指向jdk文件夹,而不是JRE C:\Program Files\Java\jdk1.8.0_74

还有另一种解决方案也有效。

转到项目财产中的“生成路径”设置。删除JRE系统库将其添加回;选择“添加库”并选择JRE系统库。默认值对我有效。

这是因为在不同的jar文件中有多个类。删除和重新添加JRE库将首先选择正确的类。如果您想要一个基本的解决方案,请确保排除具有相同类的jar文件。

对我来说,我有三个不同的jar中的javax.xml.soap.SOAPPart:axis-saaj-1.4.jar、saaj-api-1.3.jar和rt.jar

在这种情况下,如果您确定应该能够访问给定的类,那么这可能意味着您向项目中添加了几个jar,这些jar包含具有相同名称(或路径)但内容不同的类,并且它们相互覆盖(通常,旧的自定义构建jar包含内置的第三方库的旧版本)。

例如,当您添加一个jar实现:

a.b.c.d1
a.b.c.d2

而且是仅实现以下功能的旧版本:

a.b.c.d1
(d2 is missing altogether or has restricted access)

在代码编辑器中,一切都很好,但如果“旧”库覆盖了新库,则在编译过程中会失败-d2突然变得“丢失或无法访问”,即使它存在。

解决方案是检查编译时库的顺序,并确保首先使用具有正确实现的库。