我正在使用Apache CXF 2.7.6 wsdl2java
,似乎该工具忽略或无法找到公共目录条目。特别是我的一个XSD文件中有以下<xs:import>
:
<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10"/>
使用目录文件条目无法正确解决上述问题:
<public publicId="http://www.ivoa.net/xml/STC/STCcoords/v1.10" uri="STCcoords-v1.10.xsd"/>
如果我通过添加<xs:import>
属性更改schemaLocation
,即将其更改为:
<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10" schemaLocation="http://www.ivoa.net/xml/STC/STCcoords/v1.10/>
它解析文件,但我的理解是这不应该是必要的,因为我不想编辑我提供的XSD。
无论是使用OASIS XML格式还是TR9401格式,行为都是相同的。
答案 0 :(得分:4)
我从 Apache CXF 用户邮件列表中得到的答复是,XML Schema规范将这一点留给了实现,因此不会被视为错误。
帖子here(帖子日期为2013年9月26日,位于第2页,我似乎无法直接提供该页面的链接)。相关结论是here。我引用:
我对此的看法:
1)根据架构规范,如果schemaLocation提示不是 指定,由应用程序决定如何解决它 如果需要的话。因此,我并不认为这是一个“错误”。我们 特别是只使用提供的信息,并且是其中的一部分 “编译单元”(又名:wsdl)。
2)就个人而言,我认为不提供这个是非常愚蠢的 schemaLocation并强烈建议添加它。该 只有在我导入模式时才会看到未指定的时间 也嵌入在相同的wsdl中(因此没有位置) 当我在规格中看到诸如“应用程序”之类的东西时,那就是 我,是一个互操作性的噩梦。只需指定它。
3)所有人都说,根问题在于XmlSchema的SchemaBuilder 类。如果没有schemaLocation,它会认为它是一部分 编译单元,它正在努力并继续。不试图 什么都解决如果你想追求补丁或其他东西,它 将是SchemaBuilder.java的680左右。但即使改变了五月 需要CXF的更多支持来预先填充名称空间 已经知道要避免它为他们上网。不 真的很确定。
因此,确认:
wsimport
工具使用目录来解析 import 语句,即使没有 schemaLocation 属性。wsdl2java
工具没有使用目录来解析没有 schemaLocation 属性的 import 语句