7

我使用轴自动生成 Web 服务工件,然后将其转换为应用程序中使用的对象。这样做有合理的模式吗?我们编写了转换方法来从轴创建的对象中输出我们的对象,在其他时候我们编写了一组中间的转换器类,将轴对象转换为我们的应用程序对象?有没有一种通用的方法来解决这个问题?

4

5 回答 5

3

如果我理解正确,您想使用 Axis WSDL2Java 功能从 WSDL 生成代码,然后将其映射到您现有的应用程序对象模型。在这种情况下,您可能需要考虑将 Axis 与JiBX绑定一起使用。

于 2008-11-05T02:34:19.723 回答
1

如果目标是将“生成的轴”转换为您的业务对象,您可以尝试像推土机(http://dozer.sourceforge.net/)这样的工具,它是一个“映射器”,可以从对象实现复制到另一个实现。它不知道如何使用它(我认为您必须在 xml 文件中解释翻译)然后它应该可以工作(我自己没有使用但一些同事将它用于类似目的并且它似乎有效)

于 2008-11-06T16:00:21.360 回答
1

我想有一种常识性的方法可以做到这一点。抽象一点你的思想并想象层次。

  1. 您将获得一个包含基本 IO 以及基本会话功能和/或凭据的库。
  2. 创建一个转换层。在这里,您将放置构建应用程序相关对象所需的所有代码。为您的应用程序提供一个漂亮的界面来完成这一层。

转换层可以通过多种方式完成。

  • 如果转换很简单,您几乎可以将第一层和第二层合并为一个。扩展 POJOS 以提供转换功能。这将为您提供至少两段代码,自动生成的和扩展+功能

  • 如果我们谈论需要转换为多个小型应用程序对象的大型 XML。好的,保持第一层不变,在第二次使用中:

    • 命令模式:封装转换。
    • 如果转换也变得混乱:责任链将帮助您生成转换树。

我希望这有帮助

于 2008-11-07T07:41:09.370 回答
0

我们过去也遇到过类似的问题。最近,对于我们让 Axis 为其生成工件的复杂 Web 服务,我们最终得到了 157 个 Java 类,其名称类似于“MaintainOffersRequestTypeReqReqDataMaintEnhancementCancellationReason”。

我们最终编写了将这些 Axis 生成的对象转换为业务对象的类,类似于您的上一个想法。我不知道这是否是最好的方法,但它肯定是一个可行的解决方案。

于 2008-10-27T18:59:48.387 回答
0

如果您使用的是 Axis 1,那么您的业务类与 Axis 数据类具有相同的限定名称,并且适用一些其他条件,您可以使用您的业务类代替 Axis 类,而无需进行设置。我们已经做过很多次了。

对于 Axis 2,我们遇到了除 ADB(默认)之外的数据绑定问题,因此我们广泛使用 Apache Commons Beanutils 在 Axis 类和我们的业务类之间来回复制数据。

于 2008-11-05T14:00:29.653 回答