JAXB从含多个import的XSD生成Java类无法解析导入类型如何处理
解决方案
你的问题核心来自两处错误:命名空间前缀绑定不匹配、catalog配置和xjc调用方式不符合规则,按以下步骤修改即可解决:
- 第一步:修正
lawsuitcontext.xsd的命名空间前缀绑定
你当前lawsuitcontext.xsd中xmlns:base="http://example.com/base/integration"和import导入的http://example.com/base命名空间不一致,导致所有base:前缀的类型都无法匹配,将这行修改为和其他文件一致的配置:xmlns:base="http://example.com/base" - 第二步:修正catalog配置
XJC对没有指定schemaLocation的<import>标签,默认会将命名空间作为systemId处理,你当前用的public条目无法匹配对应规则,将catalog.cat替换为以下内容:<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"> <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> <system systemId="http://example.com/base" uri="base.xsd"/> <system systemId="http://example.com/lawsuitcontext" uri="lawsuitcontext.xsd"/> <system systemId="http://example.com/security" uri="security.xsd"/> </catalog> - 第三步:正确调用xjc命令
不要仅传入digitalfile.xsd,一次性按依赖顺序传入所有xsd文件,xjc会自动合并处理所有类型,避免重复生成:xjc -d out -catalog catalog.cat base.xsd security.xsd lawsuitcontext.xsd digitalfile.xsd
如果需要为不同命名空间的生成类指定不同的Java包,避免类名冲突,可以新增绑定文件bindings.xjb:
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <jaxb:bindings schemaLocation="base.xsd" node="/xsd:schema"> <jaxb:schemaBindings> <jaxb:package name="com.example.base"/> </jaxb:schemaBindings> </jaxb:bindings> <jaxb:bindings schemaLocation="security.xsd" node="/xsd:schema"> <jaxb:schemaBindings> <jaxb:package name="com.example.security"/> </jaxb:schemaBindings> </jaxb:bindings> <jaxb:bindings schemaLocation="lawsuitcontext.xsd" node="/xsd:schema"> <jaxb:schemaBindings> <jaxb:package name="com.example.lawsuitcontext"/> </jaxb:schemaBindings> </jaxb:bindings> <jaxb:bindings schemaLocation="digitalfile.xsd" node="/xsd:schema"> <jaxb:schemaBindings> <jaxb:package name="com.example.digitalfile"/> </jaxb:schemaBindings> </jaxb:bindings> </jaxb:bindings>
调用时加上绑定文件参数即可:
xjc -d out -catalog catalog.cat -b bindings.xjb base.xsd security.xsd lawsuitcontext.xsd digitalfile.xsd
内容的提问来源于stack exchange,提问作者drewpol
相关产品推荐
相关产品推荐

