如何从我的路径中的空格中调用ant的WSDL2JAVA

时间:2009-10-12 11:15:02

标签: java windows ant whitespace

嗨,伙计们!

我尝试在我的ant文件中调用Axis2 WSDL2JAVA来创建WSDL客户端。但它已经破碎,因为我的路径中有空白(我在Windows上......)。这是我的蚂蚁

<property name="wsdl.file" location="C:\path with whitespaces\project\subdir\my.wsdl"/>
...
<target name="generate.client" depends="Clean.Client">
    <java  classname="org.apache.axis2.wsdl.WSDL2Java">
        <arg value="-uri" />
        <arg file="${wsdl.file}"/>
        <arg value="-u"/>
        <arg value="-p"/>
        <arg value="my.package.declaration"/>
        <arg value="-S"/>
        <arg value="src/test"/>
        ...
        <classpath refid="axis2.classpath"/>
    </java>
</target>

当我尝试运行它时,我收到了这个错误:

[java] Caused by: java.net.URISyntaxException: Illegal character in path at index 18: file:/C:/path with whitespaces/project/subdir/my.wsdl
 [java]     at java.net.URI$Parser.fail(URI.java:2809)
 [java]     at java.net.URI$Parser.checkChars(URI.java:2982)
 [java]     at java.net.URI$Parser.parseHierarchical(URI.java:3066)
 [java]     at java.net.URI$Parser.parse(URI.java:3014)
 [java]     at java.net.URI.<init>(URI.java:578)
 [java]     at org.apache.ws.commons.schema.resolver.DefaultURIResolver.resolveEntity(DefaultURIResolver.java:57)
 [java]     ... 39 more

我尝试添加&amp; “到我的财产,但它不起作用,然后给我一个加倍的路径。我还尝试将嵌套的 arg value = 更改为 arg line = ,但它是一样的。

这真的是一个但是阻止我从具有空格的目录构建?我不敢相信这些日子仍在发生......: - (

更新我无法移动项目以摆脱空白。

4 个答案:

答案 0 :(得分:2)

在URI中,必须将空格转义为%20

答案 1 :(得分:1)

由于您使用的是Windows,因此您可以选择使用目录的短名称。您在目录上使用dir /x命令来查找短名称。例如,dir /x c:\将列出C:\上的文件和目录,包括“带有空格的路径”的根,没有空格。

您会发现有用的常用短名称是“程序文件”,通常解析为“PROGRA~1”。

在您的示例中,路径可能会变为:

C:\pat~1\project\subdir\my.wsdl

但是,如上所述,最好使用dir命令测试路径(使用/x来获取短名称,然后再次测试使用短名称

答案 2 :(得分:1)

最新的Axis2版本(1.6.2)仍有此问题: 创建一个空格替换为%20的URI最好使用makeurl函数完成:

<makeurl file="${wsdl.src}" property="wsdl2java.uri"/>
<java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
    <arg line="-uri ${wsdl2java.uri}"/>
     <arg line="-S ${src.dir}/"/>
       [...]
    <classpath>
       <path refid="axis2-classpath"/>
    </classpath>
</java>

答案 3 :(得分:0)

简单的解决方案是摆脱那些讨厌的空白。相信我,你会很高兴你做到了。