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

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

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

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


当前回答

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

其他回答

抱歉更新旧POST。我得到了报告的问题,并按照如下所述解决了它。

假设您使用的是Eclipse+m2e maven插件,如果出现此访问限制错误,请右键单击出现错误的项目/模块-->财产-->构建路径-->库-->将JDK/JRE替换为在Eclipse工作区中使用的项目/模块。

我遵循了上述步骤,问题得到了解决。

我的猜测是,您正在尝试用您拥有的库中的标准类替换Java5附带的标准类。

根据许可协议的条款,这是不允许的,但是AFAIK直到Java5才强制执行。

我以前在QName中见过这种情况,我通过从jar中删除类来“修复”它。

编辑http://www.manpagez.com/man/1/java/选项“-Xbootclasspath:”的注释

“不应部署使用此选项来重写rt.jar中的类的应用程序,因为这样做会违反Java 2 Runtime Environment二进制代码许可证。”

这个http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE

“Java技术限制。您不能修改Java平台接口(“JPI”,标识为包含的类在“java”包或“java”的任何子包中通过在JPI或否则会导致JPI中的类。如果您创建了(i)扩展的附加类和相关APIJava平台的功能,以及(ii)第三方软件开发人员开发额外的软件附加API,您必须立即广泛发布此类API的准确规范,供所有人免费使用开发人员。您不能创建或授权被许可方创建附加类、接口或以任何方式标识为“java”的子包,“javax”、“sun”或sun在任何命名约定名称。"

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

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

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

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

在我的案例中,生成路径JRE和执行环境中安装的JRE之间不匹配。我进入了项目>财产>Java编译器。底部有一条警告信息。

我单击链接“Installed JRE”、“Execution environment”、“Java build path”,将JDK版本更改为1.7,警告消失。

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