2016-02-01 42 views
1

我想使用Apache CXF Maven插件生成webservice客戶端,但我遇到了錯誤。 我只是Eclipse的一個非常簡單的Maven項目設置 WSDL文件位於這裏 - http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdlApache CXF插件 - 失敗生成客戶端

我使用的POM文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.test</groupId> 
<artifactId>WebserviceClientGenerator</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<properties> 
    <cxf.plugin.version>3.1.4</cxf.plugin.version> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.plugin.version}</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <sourceRoot>${project.build.directory}/src/main/java/com/test</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdl</wsdl> 
           <extraargs> 
            <extraarg>-impl</extraarg> 
            <extraarg>-verbose</extraarg> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions>       
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

當我運行一個Maven安裝這個POM文件,我得到以下錯誤

[ERROR] http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdl [1559:11]: undefined simple or complex type 'soapenc:Array' 
org.xml.sax.SAXParseExceptionpublicId: http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdl; systemId: http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdl; lineNumber: 1559; columnNumber: 11; undefined simple or complex type 'soapenc:Array' 
    at com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:180) 
    at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175) 
    at com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110) 
    at com.sun.xml.xsom.impl.parser.DelayedRef.run(DelayedRef.java:85) 
    at com.sun.xml.xsom.impl.parser.ParserContext.getResult(ParserContext.java:135) 
    at com.sun.xml.xsom.parser.XSOMParser.getResult(XSOMParser.java:214) 
    at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:538) 
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:269) 
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95) 
    at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:460) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:726) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:270) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:415) 
    at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 
    at org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.generate(WSDL2JavaMojo.java:415) 
    at org.apache.cxf.maven_plugin.AbstractCodegenMoho.execute(AbstractCodegenMoho.java:260) 
    at org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:512) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 

有誰知道是否有任何我使用cxf插件進行配置以使其工作?

回答

1

不幸的是,WSDL使用SOAP編碼,而Apache CXF(或任何當前的技術)不支持這種編碼。

您必須依賴舊的SOAP堆棧,如Axis 1.x,它們是唯一可以處理這種過時編碼的堆棧。使用axistools-maven-plugin和Axis 1.4,您可以生成客戶端存根的WSDL:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>axistools-maven-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
     <execution> 
      <id>generate-client</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>wsdl2java</goal> 
      </goals> 
      <configuration> 
       <urls> 
        <url>http://api.zenfolio.com/api/1.8/zfapi.asmx?wsdl</url> 
       </urls> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

然後你需要軸1.4添加爲運行時依賴:

<dependency> 
    <groupId>axis</groupId> 
    <artifactId>axis</artifactId> 
    <version>1.4</version> 
</dependency> 

生成的客戶端會位於target/generated-sources/axistools/wsdl2java默認情況下,但您可以使用outputDirectory配置元素覆蓋該位置。