有没有办法将 thrift IDL 转换为 wsdl 规范?

Is there a way to convert thrift IDL into wsdl spec?

是否有任何开源库或在线服务可以在 thrift IDL 的基础上自动生成 wsdl 规范?

目标是在现有 thrift API 之上构建外观 API,这将允许通过 SOAP 协议与旧系统耦合。

有几个现成的工具可以将 Thrift IDL 转换为 WSDL。答案的其余部分假设我们生活在 Java 的世界中,手边有 JDK 和 Maven,并且互联网连接可用。


第一个是Swift Code Generator Tool。正如自述文件所述,必须:

  1. 下载最新版本:

    mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=central::default::http://repo1.maven.apache.org/maven2 -Dartifact=com.facebook.swift:swift-generator-cli:RELEASE:jar:standalone -Ddest=/tmp/
    
  2. 运行 在包含 thrift 文件的目录中下载 jar:

    java -jar /tmp/swift-generator-cli-0.23.1-standalone.jar -use_java_namespace -out ../java *.thrift
    

假设标准

- src
  - main
    - java
    - thrift

Maven 项目布局。 Swift 代码生成器将为每个 Thrift service 条目生成一个 Java 接口。每个 Thrift 源文件都必须声明一个 'java' 命名空间,如下所示:

namespace java com.acme

生成的接口将包含用于异步调用的嵌套 Async 接口。删除 Async 子接口。 Async 删除的自动化留作 reader.

的练习

使用 javac 或您最喜欢的构建工具(ant、maven、gradle 等)编译生成的 java 文件。不要忘记将 com.facebook.swift:swift-annotations:0.23.1 作为编译依赖项包含在内。


最后使用 Axis2 binary distribution 中可用的 Apache Axis2' java2wsdl 实用程序,如下所示:

/tmp/axis2-1.7.4/bin/java2wsdl.sh -cn com.acme.TargetService -cp build/classes/main

为 Thrift service TargetService {...} 条目生成 wsdl。