Я создал файл .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 ответ
Чтобы решить эту проблему, вам необходимо создать файл 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
.
Надеюсь, это поможет вам.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].