2013-03-15 131 views
4

我有一個簡單的ant腳本來從sdl構建我的類。不幸的是,wsimport立即失敗。我懷疑它與類路徑有關。Ant wsimport任務失敗

<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> 
    <classpath> 
     <pathelement location="${jaxws.lib.dir}/jaxws-tools.jar" /> 
    </classpath> 
</taskdef> 

<wsimport 
    wsdl="${project.wsdl.dir}\some.wsdl" 
    destdir="${jaxws.output.dir}" 
    keep="false" 
    extension="true" 
    verbose="true" 
    wsdlLocation="http://localhost/wsdl" 
    target="2.1"> 
    <depends file="${project.wsdl.dir}"/> 
    <produces dir="${jaxws.output.dir}"/> 
</wsimport> 

的,這是它產生的輸出:

[wsimport] 15 Mar 2013 12:23:25 PM com.sun.xml.bind.v2.util.XmlFactory createDocumentBuilderFactory [wsimport] SEVERE: null [wsimport] java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V [wsimport] at com.sun.xml.bind.v2.util.XmlFactory.createDocumentBuilderFactory(XmlFactory.java:176) [wsimport] at com.sun.tools.xjc.reader.internalizer.DOMForest.(DOMForest.java:162) [wsimport] at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.resetSchema(SchemaCompilerImpl.java:215) [wsimport] at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.(SchemaCompilerImpl.java:114) [wsimport] at com.sun.tools.xjc.api.XJC.createSchemaCompiler(XJC.java:72) [wsimport] at com.sun.tools.ws.wscompile.WsimportOptions.(WsimportOptions.java:152) [wsimport] at com.sun.tools.ws.wscompile.WsimportTool.(WsimportTool.java:89) [wsimport] at com.sun.tools.ws.wscompile.WsimportTool.(WsimportTool.java:92) [wsimport] at com.sun.tools.ws.ant.WsImport2.execute(WsImport2.java:848) [wsimport] at com.sun.istack.tools.ProtectedTask.execute(ProtectedTask.java:103) [wsimport] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:269) [wsimport] at org.apache.tools.ant.Task.perform(Task.java:364) [wsimport] at org.apache.tools.ant.Target.execute(Target.java:301) [wsimport] at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:135) [wsimport] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.parseBuildFile(InternalAntRunner.java:192) [wsimport] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:401) [wsimport] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)

如果我運行命令行的詳細日誌記錄創建,上的wsimport,從JAX-WS bin目錄一切完美

[wsimport] command line: wsimport -d C:\Development\Source\ccs\jaxws-output -extension -verbose -target 2.1 C:\Development\Source\ccs\wsdl\some.wsdl -wsdllocation http://localhost/wsdl 

我試過尋找解決方案,但現在我的想法不存在了

+0

這意味着它是一隻螞蟻的具體問題。 – ACV 2015-10-02 07:16:41

回答

7

我認爲那個在您提到的方法(taskdefwsimport)中使用繁瑣的事情是添加環境變量,特別是當您想在Web服務中使用SSL和基本身份驗證時。另一方面,您可以在不定義新任務的情況下使用wsimport工具。類似的東西:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE project> 
<project name="generate-client" default="main" basedir="."> 
    <property name="java.home" 
     value="X:\Software\jdk1.7.0_11" /> 
    <property name="wsdl.location" 
     value="http://localhost/wsdl" /> 
    <target name="main"> 
     <exec executable="${java.home}\bin\wsimport.exe"> 
      <arg line="${wsdl.location} -s src -Xdebug -verbose -Xnocompile" /> 
     </exec> 
    </target> 
</project> 

現在你有一個想法,你可以自定義輸出目錄,增加目標版本...

+0

我實際上想避免這種方法,以便構建可以獨立於平臺。但是,如果這是建議的方式,我會這樣做 – Leon 2013-03-16 10:38:29

+1

如果您多次使用'',那麼對於您打算支持的每個家族來說,構建可以是半平臺無關的。 – 2013-11-05 22:15:16