2016-11-05 52 views
1

我想使用maven jaxb2插件生成類。但是我收到以下異常:Maven Jaxb2插件throwin錯誤「未定義元素聲明':架構'」

org.xml.sax.SAXParseException; systemId: http://someIP/dummywsdl.asmx?wsdl; lineNumber: 32; columnNumber: 41; undefined element declaration 's:schema' 
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.loadWSDL(ModelLoader.java:412) 
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:170) 
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:119) 
at org.jvnet.mjiip.v_2_2.XJC22Mojo.loadModel(XJC22Mojo.java:50) 
at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:40) 
at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:28) 
at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:488) 
at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:311) 
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207) 
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.MojoExecutor.executeForkedExecutions(MojoExecutor.java:352) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:197) 
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:863) 
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 

搜索後,我才知道,低於2的聲明在WSDL是引起問題:

<s:element ref="s:schema"/> 
<s:any/> 

在帖子中的一個,我發現,如果我改變上述2線與下面給出的行,然後插件正在生成文件,而無需任何問題:

<s:any minOccurs="2" maxOccurs="2" /> 

下面是我使用的插件配置:

<plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.12.3</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <schemaLanguage>WSDL</schemaLanguage> 
       <generatePackage>com.abc</generatePackage> 
       <schemas> 
        <schema> 
         <url>http://someIP/dummywsdl.asmx?wsdl</url> 
        </schema> 
       </schemas> 
      </configuration> 
     </plugin> 

有沒有解決這個問題,而不改變WSDL任何其他方式,因爲這是一個客戶端WSDL,我不希望將其存儲在我的地方與上述變化。

回答

2

您的模式似乎無效。所以不,XJC不會編譯它,除非你修復錯誤。

作爲解決方法,您可以創建模式的本地副本並修復此副本。在您可以創建一個目錄文件這將「改寫」全球URL http://someIP/dummywsdl.asmx?wsdl`` into your local dummywsdl.asmx_wsdl`:

REWRITE_SYSTEM "http://someIP/dummywsdl.asmx?wsdl" "dummywsdl.asmx_wsdl" 

更多信息,請參見Using catalogs