2013-04-09 90 views
14

我在配置jaxb2-maven-plugin以从WSDL生成Java类和存在于同一个标准目录src/main/xsd中的多个XSD文件时遇到问题。使用来自WSDL的jaxb2-maven-plugin生成类

how to use jaxb2 maven plugin with inline XSD?仅与答案正确建议在插件配置中使用wsdl参数相关,但该问题确实涉及内联XSD和我的XSD是外部的。

插件目标参数列表here

我的插件配置为:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxb2-maven-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>xjc</id> 
      <goals> 
       <goal>xjc</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <packageName>com.x.y.model</packageName> 
     <wsdl>true</wsdl> 
    </configuration> 
</plugin> 

我与mvn -X clean jaxb2:xjc测试这一点,但该插件忽略.wsdl作为调试输出

[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl 
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd 
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd 

回答

21

看到通过检查的Maven的调试输出传递给JAXB XJC的参数(以及一些试验和错误)我发现我需要为插件提供2个以上的配置参数。

这将停止插件扫描XSD文件,并仅使用.wsdl作为源。例如,XSD文件作为<xsd:include schemaLocation="datatypes.xsd" />指令包含在WSDL中,这些指令在本地解决,导致WSDL和XSD中的所有类型都作为Java类生成。

为我工作的部分配置是:

<configuration> 
    <packageName>com.x.y.model</packageName> 
    <wsdl>true</wsdl> 
    <xmlschema>false</xmlschema> 
    <schemaFiles>service.wsdl</schemaFiles> 
</configuration> 

没有与<xmlschema>false</xmlschema> Maven的错误:

org.apache.maven.lifecycle.LifecycleExecutionException:未能执行目标org.codehaus .mojo:jaxb2-maven-plugin:1.5:项目foo上的xjc(default-cli):无法处理架构: /c:/projects/foo/src/main/xsd/service.wsdl

+2

OMG,谢谢你这作品时,我不指定目录,并使用默认的XSD目录 – Erich 2013-08-22 00:10:04

+0

谢谢,我需要的! – evandongen 2013-10-25 10:29:13

3

我试图jaxb2-maven-plugin其生成的Java文件

<plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>jaxb2-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>xjc</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <schemaDirectory>src/main/webapp/schemas/</schemaDirectory> 
        <wsdl>true</wsdl> 
        <outputDirectory>src/main/java</outputDirectory> 
       </configuration> 
      </plugin> 

要运行这个我已经使用命令

mvn jaxb2:xjc 

试试这个它会生成JAXB类到你的src文件夹。希望你正在寻找这个。

5

如果您正在生成wsdl和xsd以及尝试放入不同的执行配置:它可能不具有相同的schemaDirectory或插件将无法成功运行第二次执行,导致它基于此变量缓存执行。我建议这样做,如

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>jaxb2-maven-plugin</artifactId> 
      <version>1.6</version> 
      <executions> 
       <execution> 
        <id>generate-sri-facturas</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/sri</outputDirectory> 
         <packageName>${commonsource.packageName}</packageName> 
         <schemaDirectory>src/main/resources/schema/xsd</schemaDirectory> 
         <schemaFiles>factura_v1.1.0.xsd</schemaFiles> 
        </configuration> 
       </execution> 
       <execution> 
        <id>generate-sri-autorizacion-comprobantes</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xjc</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory> 
         <packageName>${commonsource.packageName}.autorizacion</packageName> 
         <wsdl>true</wsdl> 
         <xmlschema>false</xmlschema> 
         <schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory> 
         <schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

我创建了一个xsdwsdl文件夹分别进行配置。

0

您可以使用的配置如下代码:

   <configuration> 
        <!-- Package to store the generated file --> 
        <packageName>com.example.demo.wsdl</packageName> 
        <!-- Treat the input as WSDL --> 
        <wsdl>true</wsdl> 
        <!-- Input is not XML schema --> 
        <xmlschema>false</xmlschema> 
        <!-- The WSDL file that you saved earlier --> 
        <schemaFiles>horarios.wsdl</schemaFiles> 
        <!-- The location of the WSDL file --> 
        <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory> 
        <!-- The output directory to store the generated Java files --> 
        <outputDirectory>${project.basedir}/src/main/java</outputDirectory> 
        <!-- Don't clear output directory on each run --> 
        <clearOutputDir>false</clearOutputDir> 
       </configuration>