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

问题描述 投票:3回答:1

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

java cxf wsdl2java
1个回答
4
投票

我从Apache CXF用户邮件列表中得到的答复是,XML Schema规范将这一点留给了实现,因此不被视为错误。

线程here(帖子日期为2013年9月26日,在第2页,我似乎无法直接提供该页面的链接)。相关结论是here。我引用:

我对此的看法:

1)根据模式规范,如果未指定schemaLocation提示,则由应用程序决定如何在需要时解决它。因此,我并不认为这是一个“错误”。我们特别使用所提供的信息,并且是“编译单元”(aka:wsdl)的一部分。

2)就个人而言,我认为不提供schemaLocation是非常愚蠢的,并强烈建议添加它。我唯一没见过的时候是导入同样嵌入在同一个wsdl中的模式(所以没有位置)。 当我在规范中看到诸如“应用程序”之类的内容时,对我而言,这是一个互操作性的噩梦。只需指定它。

3)众所周知,根问题将出现在XmlSchema的SchemaBuilder类中。如果没有schemaLocation,它会假定它是它正在处理并继续的编译单元的一部分。不试图解决任何问题。如果你想要一个补丁或什么东西,它将是SchemaBuilder.java的大约680。但即使改变,也可能需要CXF方面的更多支持来预先填充它已经知道的命名空间,以避免它为他们上网。不太确定。

因此,确认:

  • 即使没有schemaLocation属性,Oracle Java 7附带的默认wsimport工具也会使用目录来解析导入语句。
  • Apache CXF 2.7.6 wsdl2java工具不使用目录来解析没有schemaLocation属性的import语句
  • Apache CXF社区不会将此视为错误。
© www.soinside.com 2019 - 2024. All rights reserved.