简而言之,问题
我必须集成一个移动混合应用程序,该应用程序可能基于 Ionic,并且必须(间接(使用许多 SOAP Web 服务。我希望移动应用程序 Typescript 客户端了解描述 Web 服务的 XSD 和 WSDL 文件定义的 bean。
一些额外的解释
在下面的解释中,我将引用解决方案中的以下对象:
- 移动应用打字稿客户端 [A]
- 移动专用服务器端 Java 应用程序 [B]
- 公开业务功能的远程 SOAP Web 服务 [C]
以下约束有效:
- 移动应用程序客户端 [A] 将通过 REST 调用与 专用服务器端应用程序 [B]
- 专用的服务器端应用程序[B]将用Java开发 专用的服务器端应用程序 [B] 将负责使用现有的 Web 服务 [C],因此充当 Typescript 应用程序客户端 [A] 和 SOAP Web 服务 [C] 之间的集成层
- SOAP Web 服务 [C] 由许多 WSDL 文件描述,由一些 XSD 文件支持,后端团队不愿意将他们的文档重写为 WSDL 和 XSD 以外的任何内容
假设 Web 服务 [C] 使用的某些请求和响应涉及以下 Java 对象
public class MyElement {
private ElementColor color;
}
其中 ElementColor 是一个 Java 枚举,例如
public enum ElementColor {
RED,
GREEN,
BLUE,
}
这些 Java 对象是在 WSDL 和 XSD 文件中定义的,因此我们可以构建一个 JAR 文件,将其导入服务器端应用程序 [B] 中,因此我们的服务器端应用程序 [B] 将知道 "color" 属性在 MyElement 类中可以采用的可能值。 都很好。
我的问题是 Typescript 移动客户端 [A] 不会导入 JAR 文件(显然(,因此当客户端开发人员必须编写请求或解析涉及 MyElement 对象的响应时,他要么
- 将"color"字段视为字符串(但是他可以向其写入任何值,而不仅仅是有效的"RED","GREEN"和"BLUE"值(
- 定义一个模仿 ElementColor Java 枚举的 Typescript 枚举。
第二个选项更简洁,但仍然与 WSDL 和 XSD 文件中定义的实际模型没有紧密联系,即客户端开发人员仍然可以在他的 Typescript 枚举中添加一个"YELLOW"值并将其发送到后端。
我想在我的 Typescript 代码库中自动导入/继承由 WSDL 和 XSD 文件定义的模型,或者从这些相同的 WSDL 和 XSD 文件生成的 Java 类的 Typescript 映射。请注意,在运行时检索这些对象是不够的(我可以编写一个转储它们的服务(,因为客户端开发人员在开发时仍然无法看到它们。
提前感谢您的帮助。
到目前为止,我发现解决这个问题的最佳方法是利用类似这个打字稿生成器插件的东西,它可以在 Typescript 类中转换 Java 类。
我已经有一个使用 cxf codegen 插件的 Maven pom 为了将 WSDL 和 XSD 文件转换为 Java 代码,我只需要将打字稿生成器插件执行添加到进程中,以便 Java 文件依次转换为 Typescript 文件。然后,我可以在我的混合应用项目中导入 Typescript 定义文件。