Vla*_*mir 14 xml wsdl web-services
对于那些经常使用Web服务的人来说,他们不时会得到更新,这并不奇怪.而且您始终需要跟踪这些更新的更改.
在我的特定情况下,我处理由WSDL定义的Web服务,并且我获得了基于此WSDL生成的类.
但是在从更新的WSDL重新生成类之前,我希望看到WSDL中的更改并确定更改量 - 看看我应该做些什么准备.
不幸的是,如果我只比较新旧版本的.wsdl文件,由于一个原因并不总是很好 - wsdl内容可以重新排序(内部重构).这就是找到更多语义工具的原因.
我已经尝试过Oxygen XML Diff工具,但它对我来说效果也不好.
我正在寻找一个工具,它将采用两个XML并且只带来语义差异,例如:
为了这个工作,我猜这个工具必须加载并深入分析结构,Oxygen XML Diff声称做得很好,但它只是一个改进版本的文本文件比较.
您能否为此推荐一项工作,特别是要查看基于WSDL的Web服务更新.
更新1:新想法是比较生成的源而不是WSDL.
谢谢.
Mad*_*sen 14
http://membrane-soa.org有一个Java API,用于在其SOA模型中比较WSDL.
package sample.wsdl;
import java.util.List;
import com.predic8.wsdl.*;
import com.predic8.wsdl.diff.WsdlDiffGenerator;
import com.predic8.soamodel.Difference;
public class CompareWSDL {
public static void main(String[] args) {
compare();
}
private static void compare(){
WSDLParser parser = new WSDLParser();
Definitions wsdl1 = parser.parse("resources/diff/1/article.wsdl");
Definitions wsdl2 = parser.parse("resources/diff/2/article.wsdl");
WsdlDiffGenerator diffGen = new WsdlDiffGenerator(wsdl1, wsdl2);
List<Difference> lst = diffGen.compare();
for (Difference diff : lst) {
dumpDiff(diff, "");
}
}
private static void dumpDiff(Difference diff, String level) {
System.out.println(level + diff.getDescription());
for (Difference localDiff : diff.getDiffs()){
dumpDiff(localDiff, level + " ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
执行后,您将获得清单2中所示的输出.它是两个WSDL文档之间的差异列表.
Port ArticleServicePTPort removed.
Port ArticleServicePTPort2 added.
Operation create removed.
Operation create2 added.
Schema http://predic8.com/wsdl/material/ArticleService/1/ has changed:
Element createResponse has changed:
ComplexType has changed:
Sequence has changed:
Element NewElementForTest added.
Run Code Online (Sandbox Code Playgroud)
有关该工具输出的示例,http://www.service-repository.com/提供了一个在线WSDL Comparator工具,该工具返回两个WSDL之间差异的报告.该报告不是一个简单的XML差异.
小智 6
对于基于SOA构建的任何系统,提出的问题实际上非常普遍.您通常有一些使用WSDL的消费者,或者使用相同WSDL的一些服务,现在需要更新WSDL.
否则,WSDL的diff和diff生成的XML都不能可靠地提供帮助.
除了模式更改之外,WSDL还可以更改有效负载的结构(主体/标头),编码/限定,SOAP操作,绑定属性 - 任何一种都可能导致互操作性的丧失.
为了使事情变得更加棘手,输入中的某些类型的更改会破坏"更新到旧"的情况,而在输出中它们应被视为不间断.例如,请求中的新可选元素如果传递则会破坏旧服务,但旧服务不会生成响应中的相同元素(因为它不知道它),并且元素缺失将被容忍更新的客户端,因为该元素是可选的.
我的团队每周要面对这些艰巨的任务.直到最近,我们对WSDL /模式文件进行了手动差异,并试图找出影响.有时很明显,但有时我们的方法会导致错误.我们需要更好的方法.
膜SOA是一些帮助.不幸的是,在某些情况下,它无法检测到架构中的更改,错误地将操作报告为未受影响,而实际上它已被破坏.从输出中还没有立即清楚报告了什么情景("旧到更新"或"更新到旧").
因此,经过几年的痛苦,我不得不编写自己的代码来回答上述问题,我可以直接向我们的B/PM提供影响评估的支持文档.
请看这里:https://wsdldiff.mockmotor.com/
这并不是说人们应该盲目地依赖这样的工具,但是在进行影响评估时会节省大量的时间.