1

我使用 jaxws-maven-plugin 从 wsdl 生成 java。wsdl位于本地网络,但指的是互联网上的一些xsd。

使用 maven 插件生成代码时会遇到麻烦,因为它缺少高级 http 代理设置。

这个问题有解决方法吗?我的配置是:

    <plugin>
        <groupId>org.jvnet.jax-ws-commons</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.2</version>
        <executions>
            <execution>
                <goals>
                    <goal>wsimport</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
         <!--<httpproxy>127.0.0.1:5865</httpproxy>-->
            <packageName>my.pkg</packageName>
            <verbose>true</verbose>
            <wsdlUrls>
                <wsdlUrl>
                    http://10.31.7.64:13080/service.wsdl
                </wsdlUrl>
            </wsdlUrls>
        </configuration>
    </plugin>

没有代理我得到

parsing WSDL...

[ERROR] IOException thrown when processing "http://www.w3.org/2005/05/xmlmime". Exception: java.net.ConnectException: Connection refused: connect.

有了代理我得到了

parsing WSDL...


[ERROR] Server returned HTTP response code: 504 for URL: http://10.31.7.64:13080/service.wsdl

可能是代理问题,但我在公司网络后面没有另一个代理。

4

2 回答 2

3

更好的方法是使用 JVM 的 noProxy 变量。然后,当 WSDL 不可用时,您的构建会失败(在我的情况下,这对集成测试非常有用)您可以将其添加到jaxws-maven-plugin配置中:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.4.1</version>
<executions>
    <execution>
        <id>wsdltoJava</id>
        <goals>
            <goal>wsimport</goal>
        </goals>
        <configuration>
            <wsdlUrls>
                <wsdlUrl>https://someService.yourcompany.net/Service/Service?wsdl</wsdlUrl>
            </wsdlUrls>
            <vmArgs>
                <vmArg>-Dhttp.nonProxyHosts=*.yourcompany.net, 10.31.7.64</vmArg>
            </vmArgs>
            <keep>true</keep>
            <packageName>com.yourcompany.package</packageName>
            <sourceDestDir>your/target/directory</sourceDestDir>
        </configuration>
    </execution>
</executions>

于 2019-02-24T14:43:54.197 回答
1

AFAIU,当我们启用 时httpproxy,所有请求都将转到该代理,包括<wsdlUrl>.

服务器返回

HTTP response code: 504 for URL: http://10.31.7.64:13080/service.wsdl 

状态代码定义告诉我们如下: -

504网关超时

服务器在充当网关或代理时,没有收到来自 URI(例如 HTTP、FTP、LDAP)指定的上游服务器或它在尝试完成时需要访问的其他辅助服务器(例如 DNS)的及时响应请求。

根本原因可能是代理不知道我们的地址,在这种情况下是10.31.7.64

恕我直言,请尝试下载wsdl并将其放入本地计算机。然后使用wsdlFiles进行配置,如下例所示: -

 <configuration>
     <wsdlFiles>
         <wsdlFile>${basedir}/path/to/wsdl</wsdlFile>
     </wsdlFiles>
 </configuration>

我希望这可能会有所帮助。

于 2013-04-18T02:22:58.770 回答