Apache CXF :: wsdl2java忽略公共条目的目录配置

时间:2013-09-26 13:44:55

标签: java cxf wsdl2java

我正在使用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格式,行为都是相同的。

1 个答案:

答案 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的更多支持来预先填充名称空间   已经知道要避免它为他们上网。不   真的很确定。

因此,确认:

  • Oracle Java 7 附带的默认wsimport工具使用目录来解析 import 语句,即使没有 schemaLocation 属性。
  • Apache CXF 2.7.6 wsdl2java工具没有使用目录来解析没有 schemaLocation 属性的 import 语句
  • Apache CXF社区不会将此视为错误。