如何协调Java Web服务中原始文件和生成文件之间的冲突?

时间:2010-03-29 21:03:17

标签: java web-services wsimport

我有一个使用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中。如果一切都失败了,这将是我的工作,但似乎非常不优雅。

我确信我错过了一个简单的最佳做法。欣赏任何见解!

1 个答案:

答案 0 :(得分: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