2

我有一个使用 mypackage.Foo 类的旧版 Java 应用程序。我希望该应用程序利用返回 Foo 实例的 Web 服务。为了连接到这个 Web 服务,我在 WSDL 上使用 wsimport 来生成工件,它给了我另一个 Foo.java 文件。理想情况下,我想告诉 wsimport 生成使用原始 Foo 的工件并且不生成任何额外的 Foo 文件,但我还没有找到这样做的方法。如何协调 Java 应用程序中的两个 Foo 文件?看来我的选择是:

1)将生成的Foo文件放在另一个包中。但是随后将 otherpackage.Foo 分配给 mypackage.Foo 变量失败

2)使用生成的Foo代替原来的Foo。在某些情况下,这似乎是最好的解决方案,但原始 Foo 具有生成的 Foo 中没有的功能。此外,在应用程序范围内进行更改是不可行的。

3)使用第一个选项,写一个方法,手动将otherpackage.Foo的字段复制到mypackage.Foo中。如果一切都失败了,这就是我要做的,但看起来非常不雅。

我确定我错过了一个简单的最佳实践。感谢任何见解!

4

1 回答 1

1

当您从 WSDL 生成 Java 代码时,您可以使用 Apache CXF 及其 wsdl2java 工具(或使用 maven-cxf-codegen-plugin)并指定以下选项:

-nexclude <schema-namespace>=<java-package> 

使用此选项将:

  • 告诉 wsdl2java 工具不要从给定的 XML 命名空间生成类,
  • 告诉工具从给定的 java 包导入生成的代码。

当然,引用的类在编译期间必须存在于 java-package 中(在代码生成期间不需要)。

在您的示例中使用:

wsdl2java -nexclude <some-schema-namespace-I-dont-know>=mypackage
于 2010-03-29T21:34:18.290 回答