Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从WSDL使用jaxb2 maven插件生成类_Java_Maven_Jaxb_Jaxb2 Maven Plugin - Fatal编程技术网

Java 从WSDL使用jaxb2 maven插件生成类

Java 从WSDL使用jaxb2 maven插件生成类,java,maven,jaxb,jaxb2-maven-plugin,Java,Maven,Jaxb,Jaxb2 Maven Plugin,我在配置jaxb2-maven插件以从WSDL和多个XSD文件生成Java类时遇到问题,这些文件都存在于同一个标准目录src/main/XSD 只是答案正确地建议在插件配置中使用wsdl参数,这个问题与内联XSD有关,而我的XSD是外部的 将列出插件目标参数 我的插件配置是: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin<

我在配置
jaxb2-maven插件
以从WSDL和多个XSD文件生成Java类时遇到问题,这些文件都存在于同一个标准目录
src/main/XSD

只是答案正确地建议在插件配置中使用
wsdl
参数,这个问题与内联XSD有关,而我的XSD是外部的

将列出插件目标参数

我的插件配置是:

<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>

通过检查传递给jaxbxjc的参数的Maven调试输出(以及一些尝试和错误),我发现我需要为插件提供另外两个配置参数

这将停止对XSD文件的插件扫描,并仅使用
.wsdl
作为源代码。例如,XSD文件作为
指令包含在WSDL中,这些指令在本地解析,从而将WSDL和XSD中的所有类型生成为Java类

为我工作的配置部分是:

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

com.x.y.model
真的
假的
service.wsdl
如果没有
false
Maven错误,则:

org.apache.maven.lifecycle.LifecycleExecutionException:未能在project foo:上执行目标org.codehaus.mojo:jaxb2 maven插件:1.5:xjc(默认cli)无法处理架构: /c:/projects/foo/src/main/xsd/service.wsdl


我尝试了生成java文件的
jaxb2 maven插件

<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>

试试这个,它会将jaxb类生成到您的src文件夹中。希望您能找到它。

如果您正在生成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> 

org.codehaus.mojo
jaxb2 maven插件
1.6
生成sri facturas
生成源
xjc
目标/生成源/sri
${commonsource.packageName}
src/main/resources/schema/xsd
factura_v1.1.0.xsd
生成sri Autorization comprobantes
生成源
xjc
目标/生成源/sri/自动生成
${commonsource.packageName}.autorization
真的
假的
src/main/resources/schema/wsdl
AutorizacionComprobantes.wsdl

我创建了一个
xsd
和一个
wsdl
文件夹来分离配置。

您可以在配置中使用以下代码:

              <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>

com.example.demo.wsdl
真的
假的
horarios.wsdl
${project.basedir}/src/main/resources
${project.basedir}/src/main/java
假的

我对jaxb2 maven插件2.5.0提出了这个问题。以下是我的解决方案:


org.codehaus.mojo
jaxb2 maven插件
2.5.0
产生资源
xjc
xjc
wsdl
${project.basedir}/src/main/resources/wsdl
${project.basedir}/src/main/java
假的
com.project.generated
真的

omg,谢谢。当我没有指定目录并使用默认的xsd目录时,这一点很有效
        <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> 
              <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>