Я создал файл .wsdl в /src/main/resources/wsdl. Здесь я вставил содержимое мыла wsdl.

Я добавил в maven следующий плагин:


<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.14.0</version>

        <executions>
            <execution>
                <goals>
                    <goal>generate</goal>
                </goals>

                <configuration>
                    <generatePackage>bankup.wsdl</generatePackage>
                    <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                    <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
                    <schemaIncludes>
                        <include>*.wsdl</include>
                    </schemaIncludes>
                    <clearOutputDir>true</clearOutputDir>
                </configuration>

            </execution>

        </executions>
    </plugin>

Не удается построить проект из-за ошибки при создании классов из файла wsdl. В классе objectFactory есть два объявления collesion. Ошибка, как показано ниже:

[ERROR] Error while generating code.Location [ http://uri/ifx?xsd=ws-bankup_schema4.xsd{3125,63}].
com.sun.istack.SAXParseException2: Two declarations cause a collision in the ObjectFactory class.
    at com.sun.tools.xjc.ErrorReceiver.error (ErrorReceiver.java:86)
    at com.sun.tools.xjc.generator.bean.ObjectFactoryGeneratorImpl.populate (ObjectFactoryGeneratorImpl.java:191)
    at com.sun.tools.xjc.generator.bean.PublicObjectFactoryGenerator.populate (PublicObjectFactoryGenerator.java:59)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.<init> (BeanGenerator.java:272)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generate (BeanGenerator.java:171)
    at com.sun.tools.xjc.model.Model.generateCode (Model.java:288)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.generateCode (XJC23Mojo.java:66)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:41)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:28)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute (RawXJC2Mojo.java:478)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute (RawXJC2Mojo.java:320)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    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)
[ERROR] Error while generating code.Location [ http://uri/ifx?xsd=ws-bankup_schema5.xsd{3,63}].
com.sun.istack.SAXParseException2: (Related to above error) This is the other declaration.   
    at com.sun.tools.xjc.ErrorReceiver.error (ErrorReceiver.java:86)
    at com.sun.tools.xjc.generator.bean.ObjectFactoryGeneratorImpl.populate (ObjectFactoryGeneratorImpl.java:193)
    at com.sun.tools.xjc.generator.bean.PublicObjectFactoryGenerator.populate (PublicObjectFactoryGenerator.java:59)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.<init> (BeanGenerator.java:272)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generate (BeanGenerator.java:171)
    at com.sun.tools.xjc.model.Model.generateCode (Model.java:288)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.generateCode (XJC23Mojo.java:66)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:41)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:28)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute (RawXJC2Mojo.java:478)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute (RawXJC2Mojo.java:320)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    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)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

Читая журнал, я понимаю, что у wsdl есть много схем, которые имеют коллизии.

Я проверил схемы и увидел, что schema6 импортирует schema4, schema4 импортирует schema3, schema3 импортирует schema2 и schema2 импортирует schema1 . Чтобы предотвратить столкновение, я изменил конфигурацию плагина, чтобы создавать объекты схемы в отдельных пакетах. Ниже я сделал модификацию плагина:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.14.0</version>
    <executions>

        <execution>
            <id>schema6-genearate</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/resources/wsdl</schemaDirectory>
                <schemaIncludes>
                    <include>schema6.xsd</include>
                </schemaIncludes>
                <generatePackage>bankup.schema6.generated</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
            </configuration>
        </execution>

        <execution>
            <id>schema5-genearate</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <schemaDirectory>src/main/resources/wsdl</schemaDirectory>
                <schemaIncludes>
                    <include>schema5.xsd</include>
                </schemaIncludes>
                <generatePackage>bankup.schema5.generated</generatePackage>
                <generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
            </configuration>
        </execution>

    </executions>
</plugin>

Несмотря на то, что они генерируются в разных пакетах, это все равно дает мне ту же ошибку.

[ERROR] Error while generating code.Location [ schema4.xsd{3125,63}].
com.sun.istack.SAXParseException2: Two declarations cause a collision in the ObjectFactory class.
    at com.sun.tools.xjc.ErrorReceiver.error (ErrorReceiver.java:86)
    at com.sun.tools.xjc.generator.bean.ObjectFactoryGeneratorImpl.populate (ObjectFactoryGeneratorImpl.java:191)
    at com.sun.tools.xjc.generator.bean.PublicObjectFactoryGenerator.populate (PublicObjectFactoryGenerator.java:59)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.<init> (BeanGenerator.java:272)
    at com.sun.tools.xjc.generator.bean.BeanGenerator.generate (BeanGenerator.java:171)
    at com.sun.tools.xjc.model.Model.generateCode (Model.java:288)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.generateCode (XJC23Mojo.java:66)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:41)
    at org.jvnet.mjiip.v_2_3.XJC23Mojo.doExecute (XJC23Mojo.java:28)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute (RawXJC2Mojo.java:478)
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute (RawXJC2Mojo.java:320)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    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)
[ERROR] Error while generating code.Location [schema5.xsd{3,63}].
com.sun.istack.SAXParseException2: (Related to above error) This is the other declaration.   

Почему это до сих пор происходит ?? Буду признателен за любую помощь, к завтрашнему дню я поставлю границу из 50+ баллов, которые помогут мне решить эту проблему.

Спасибо.

1
user12827457 15 Июн 2020 в 12:35

1 ответ

Лучший ответ

Чтобы решить эту проблему, вам необходимо создать файл bind.xjb. Создайте файл bind.xjb по пути src/main/java/bindings. В этом файле мы разрешим конфликты, препятствующие созданию ObjectFactory. Что происходит, так это то, что в вашей схеме у вас есть ObjectFactory, объявленный в schema6 и schema5. Таким образом, обходной путь к этому: схему, которая будет сгенерирована в отдельных пакетах. В файле bind.xjb мы укажем плагину maven создать классы из schema5 и schema6 в разных пакетах. Ниже приведен код файла bind.xjb:

<jaxb:bindings version="1.0"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc">

    <jaxb:bindings
        schemaLocation="schema6.xsd"
        node="/xs:schema">

        <jaxb:schemaBindings>
            <jaxb:package name="bankup.schema6" />
        </jaxb:schemaBindings>

    </jaxb:bindings>

    <jaxb:bindings
        schemaLocation="schema5.xsd"
        node="/xs:schema">

        <jaxb:schemaBindings>
            <jaxb:package name="bankup.schema5" />
        </jaxb:schemaBindings>

    </jaxb:bindings>

</jaxb:bindings>

После этого вам нужно настроить bind.xjb в плагине maven jaxb2. Для этого вам следует изменить maven jaxb2 plugin как показано ниже:

            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>
                <executions>

                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>

                        <configuration>
                            <bindingDirectory>${project.basedir}/src/main/resources/bindings</bindingDirectory>
                            <bindingIncludes>
                                <include>bind.xjb</include>
                            </bindingIncludes>
                            <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
                            <schemaIncludes>
                                <include>*.wsdl</include>
                            </schemaIncludes>
                            <clearOutputDir>true</clearOutputDir>
                            <vmArgs>
                                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                            </vmArgs>
                        </configuration>

                    </execution>


                </executions>

            </plugin>

После запуска сборки все классы должны быть сгенерированы в каталоге по умолчанию: target/generated-sources/xjc.

Надеюсь, это поможет вам.

1
user13427898user13427898 18 Июн 2020 в 12:10