1

我在一个使用 NetBeans (6.8) 的项目中。我们使用了几种不同的 Web 服务,我们将它们添加为 Web 服务引用,并且 Netbeans 会自动wsimport为我们生成 Ant 脚本。非常方便,但有一个缺点:每次ant调用 Web 服务客户端都会重新编译。这大大减慢了构建过程,并导致与剑有关的伤害、致残和死亡人数激增。

通常,我会通过更改wsimport元素来解决这个问题

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true"/>

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true">
    <produces dir="${build.generated.dir}/jax-wsCache/PonyService" />
</wsimport>

但我不能,因为这部分 Ant 脚本是自动生成的。如果我右键单击PonyServiceWeb 服务引用并选择Edit Web Service Attributeswsimportoptions,我可以将属性添加到wsimport元素,但不能添加子元素。

那么:除了破解自动生成的 Ant 脚本之外,如何添加produces子元素?wsimport

或更一般地说:如何使 NetBeans 生成的每次构建时wsimport 不重新编译 Web 服务客户端?

(在NetBeans EE 论坛上也有特色。)

4

2 回答 2

3

我可能对这个发霉的问题有答案。自动代码生成旨在为项目提供 Web 服务客户端。代码是在一个单独的Web Service包文件夹下生成的,生成的包就在那个下面。一旦生成了该代码,就不再需要自动生成。代码在那里可以使用。

在做任何事情之前备份一切!

将生成的代码包从该文件夹拖放到您的主要源文件夹。Web Service 包文件夹当然会消失,因为里面什么都没有。Web 服务客户端定义仍然存在 - 这是我们通常会刷新定义的地方。删除那个。它不再需要了。现在进行干净重建。结果是您的项目中的代码包看起来就像您编写的所有其他内容一样 - 并且不会在每次构建时查询远程 Web 服务。

是的,您已经失去了从 WSDL 动态重新生成代码的能力,但是如果您真的需要这样做,只需重命名当前包,然后重新生成新代码并重复上述操作,并在您感到舒服时删除冗余代码. 您还可以从源树中删除 META-INF 节点。我发现它需要几个删除操作才能做到这一点。删除除 .java 代码模块之外的所有内容并进行重建后。我的代码没有问题地进行了远程连接。

当我意识到 Subversion 忽略了生成的代码时,我做了上述操作。生成的文件夹不包含 .svn 文件,因此我无法将该代码提交到我的存储库中。将代码集成到项目中的唯一方法是将其物理复制进去——然后我意识到另一个问题也得到了解决。

花了 2 年时间才找到解决方案,但我希望这对某人有所帮助......

于 2013-01-15T18:29:18.680 回答
0

您是否尝试过 NetBeans 6.9?我只是问,因为我的jaxws-build.xml外观与您的不同(都是自动 NetBeans 生成的)。

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/ListProductsService" 
    destdir="${build.generated.dir}/jax-wsCache/ListProductsService"
    wsdl="${wsdl-ListProductsService}"
    catalog="catalog.xml"
    extension="true"
    verbose="true" 
    wsdlLocation="file:/C:/NetBeansProjects/wsclient/ListProductsService.wsdl" 
    xendorsed="true">
    <depends file="${wsdl-ListProductsService}"/>
    <produces dir="${build.generated.dir}/jax-wsCache/ListProductsService"/>
</wsimport>

上述wsclient项目可以在 Web 服务引用不在线的情况下进行清理和构建。

于 2010-07-14T23:55:13.743 回答