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

如何协调JavaWeb服务中原始文件和生成文件之间的冲突?,java,web-services,wsimport,Java,Web Services,Wsimport,我有一个使用mypackage.Foo类的遗留Java应用程序。我希望该应用程序利用返回Foo实例的web服务。为了连接到这个web服务,我在WSDL上使用wsimport来生成工件,它给了我另一个Foo.java文件。理想情况下,我想告诉wsimport生成使用原始Foo的工件,并且不生成任何额外的Foo文件,但我还没有找到这样做的方法。如何协调Java应用程序中的两个Foo文件?我的选择似乎是: 1) 将生成的Foo文件放入另一个包中。但是,将otherpackage.Foo分配给mypac

我有一个使用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中。如果其他一切都失败了,这就是我所做的,但看起来非常不雅观


我肯定我错过了一个简单的最佳实践。感谢您的真知灼见

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

-nexclude <schema-namespace>=<java-package> 
-nexclude=
使用此选项将:

  • 告诉wsdl2java工具不要从给定的XML命名空间生成类
  • 告诉工具从给定的java包导入生成的代码
当然,在编译过程中,引用的类必须存在于java包中(在代码生成过程中不是必需的)

在您的示例中,请使用:

wsdl2java -nexclude <some-schema-namespace-I-dont-know>=mypackage
wsdl2java-nexclude=mypackage

想知道您是否曾经使用wsimport获得过令人满意的答案?我也遇到了同样的问题()一位同事给我提供了一个工作解决方案,它使用绑定将复杂的WSDL类型映射到本地类,基本上告诉wsimport不要为这些类生成存根,而是使用本地类。这个例子使用的是maven,所以我不确定规范版本会是什么样子,但关键是一个bindings.xml文件,其中包含诸如jxb:bindings version=“1.0”xmlns:jxb=”“xmlns:xs=”“>——一旦我对如何工作有了更好的了解,我打算发布一个答案这看起来不错,但当我这样做时,我得到一个错误,因为生成的WebService接口有一个
@xmlseealway({mypackage.ObjectFactory.class,…})
,而这个类现在不存在。