【发布时间】:2013-01-17 17:10:49
【问题描述】:
在我的一个项目中,我曾经有一个定义为长度为 20 的 WSDL 元素:
<xs:element name="LastName" type="mns:String20Type" />
其中 String20Type 是在内部 XSD 中定义的:
<xs:simpleType name="String20Type">
<xs:restriction base="xs:string">
<xs:maxLength value="20" />
</xs:restriction>
</xs:simpleType>
为了增加该元素的长度,我将 String20Type 更改为 String40Type 没有将类型定义添加到架构中并重新构建:
<xs:element name="LastName" type="mns:String40Type" />
构建成功完成,没有任何错误、警告、投诉或任何类型的提示。
为什么?
系统怎么知道String40Type是什么?
【问题讨论】:
-
在我看来,您的构建没有对架构进行任何验证。在您实际测试您的应用程序之前,这不会发生。这不是在编译时检查的,而是在运行时执行的。
-
哇哦。所以这看起来像是在暴露,因为在构建/编译时发现错误的能力通常比在运行时发现错误更可取。我刚刚在 Eclipse 的 WSDL 编辑器窗口上找到了右键单击
validate菜单项...谢谢。 -
但不幸的是,
validate操作也没有抱怨......想法? -
嗯...听起来像是 Eclipse 没有正确验证它,或者您在某处定义了该类型。我使用 LiquidXML 和 Altova XML Spy。我建议你尝试那些专门的 IDE 包,让他们验证它,看看错误在哪里。他们有免费试用,所以试一试。
-
@mastashake57 您的第二个猜测是正确的解释:我在其他地方(在那个长 WSDL 文件中)定义了该类型,与 String20Type 定义相去甚远,我只是没有看到它。此外,如果我使用真正未定义的类型(例如
String101Type),JAXB将失败构建,在模式文件的第 69 行第 6 列发出 "undefined simple or complex type 'mns:String101Type'。 。” 如果您将此作为答案发布,我会接受。谢谢!
标签: eclipse xsd wsdl xsd-validation