Eclipse创建SOAP客户端报错:javax.xml.namespace包多模块访问冲突
问题描述
- 作为Eclipse新手,按官方手册创建简单SOAP Web服务(如"Hello"),所有代码均为自动生成。
- 自动生成的客户端代码(
xxxServiceLocator、xxxServiceBindingStub)中,类似以下代码行报错:oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); - 报错提示:
the package javax.xml.namespace is accessible from more than one module: <unnamed>, java.xml - 已尝试:用不同选项重新创建客户端,未修改自动生成代码,问题仍存在。
新手友好的Eclipse解决步骤
这个问题是Java模块系统的包冲突导致的——javax.xml.namespace包同时来自JDK自带的java.xml模块和项目中的第三方JAR包,按以下步骤操作即可解决:
1. 排查冲突依赖
- 右键点击项目,选择「Properties(属性)」。
- 左侧菜单选「Java Build Path(Java构建路径)」,切换到「Libraries(库)」标签页。
- 查找是否有
jaxrpc.jar、axis.jar这类SOAP相关的老版本JAR包,这类包通常会包含javax.xml.namespace类,引发冲突。
2. 处理冲突依赖
- 如果找到上述冲突JAR包,直接选中它,点击右侧「Remove(移除)」按钮(大部分情况下,JDK自带的模块已能满足需求)。
- 若该JAR包是项目必需的,可调整依赖优先级:
- 切换到「Order and Export(顺序与导出)」标签页。
- 将「JRE System Library」拖到冲突JAR包的上方,让系统优先使用JDK自带的
java.xml模块。
3. 调整模块配置(针对Java模块项目)
如果你的项目包含module-info.java文件:
- 打开该文件,添加对
java.xml模块的依赖声明:requires java.xml; - 移除文件中对冲突JAR包的依赖声明(如果有的话)。
4. 清理重建项目
- 点击Eclipse顶部菜单「Project(项目)」→「Clean...(清理)」。
- 选中当前项目,点击「OK」完成清理。
- 右键项目,选择「Refresh(刷新)」,之后重新运行项目即可。
内容的提问来源于stack exchange,提问作者aozhinsky
相关产品推荐
相关产品推荐

