我正在使用第三方Web服务,其定义和实现超出了我的控制范围。 此Web服务将在未来发生变化。从WSDL自动提取内联XSD到XSD文件
Web服务应该用于生成一个XML文件,其中包含一些与Web服务相同的数据(由相同的XSD类型表示)以及该程序生成的一些额外信息。
我的方法:
- 创建自己的XSD指称为Web服务的WSDL的XSD定义
- 使用Java(这XSD还包括XSD类型的额外信息很明显。)使用具有相同数据绑定框架的Java SOAP框架(如Axis2或CXF)从WSDL生成数据绑定类的XML数据绑定框架(如ADB或JiXB)这将使我能够直接在一般情况下使用Web服务检索的对象)
我将在我自己的XSD文件中使用但在WSDL中定义的XSD类型可能会发生更改。无论何时他们改变,我想再次自动处理XSD和WSDL数据绑定。 (如果改变是不够显著,这可能会引发一些开发工作(但通常不)。)
我的问题:
在步骤1中,我需要一个XSD指的是同一类型,由Web服务。
WSDL指的是另一个WSDL,它指的是另一个WSDL等。最终有一个WSDL需要内联的XSD类型。据我所知,没有办法直接从XSD引用WSDL的内联XSD类型。
我认为最可行的方法是在自动处理(数据绑定之前)中包含额外的步骤,将WSDL中的内联XSD提取到其他XSD文件中。这些其他XSD文件可以通过我自己的XSD文件引用。
事情,我想避免:
- 手动复制粘贴内联XSD到XSD文件
- 任何手动步骤(如确定(我找了一个自动的过程)。手动包含内联类型的WSDL(WSDL的位置确实也会发生变化))
- 在我自己的XSD中使用xsd:any。我想我自己的XSD文件是正确的。
- 使用非Java技术(如.NET)
- 大量的执行情况(但你将如何实现这样的提取线索,欢迎反正)
PS:我发现了一些类似的问题,但他们都有这样的回答:WTH你想这么做吗?这是我相当大的背景故事的原因。
我早就猜到了这样的事情是必要的。我实际上希望有更多的框架,例如:** for(XmlSchema xmlSchema:wsdl.extractNamespaceSchemas())xmlSchema.writeFile(ns2FileName(xmlSchema.getTargetNamespace())); **啊,一个不完美的世界... – 2010-04-07 08:27:17
@Steven :听起来像是一个开源项目的机会,让世界更接近完美;-) – 2010-04-07 11:33:45