SCD "x-schema::tns" не соответствует ни одному компоненту схемы
Я бегу wsimport
от maven задачи (используя jaxws-maven-plugin
)
Моя конфигурация выглядит так:
<execution>
<id>wsimport-first</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlLocation>WEB-INF/wsdl/FirstWebService.wsdl</wsdlLocation>
<wsdlFiles>
<wsdlFile>FirstWebService.wsdl</wsdlFile>
</wsdlFiles>
<bindingFiles>
<bindingFile>global-bindings.xml</bindingFile>
<bindingFile>first-ws-bindings.xml</bindingFile>
<bindingFile>first-xs-bindings.xml</bindingFile>
</bindingFiles>
</configuration>
</execution>
И я получаю следующую ошибку:
[ERROR] SCD "x-schema::tns" didnt match any schema component
at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:269)
line 4 of file:/xxxxx/src/main/resources/WEB-INF/binding/first-xs-bindings.xml
at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95)
at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:142)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2298)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:198)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:141)
at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:444)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:205)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183)
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:483)
at org.codehaus.mojo.jaxws.Invoker.main(Invoker.java:78)
Exception in thread "main" java.lang.reflect.InvocationTargetException
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:483)
at org.codehaus.mojo.jaxws.Invoker.main(Invoker.java:78)
Caused by: com.sun.tools.ws.wscompile.AbortException
at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:144)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2298)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:198)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:141)
at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:444)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:205)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183)
... 5 more
Я думаю, что мой first-xs-bindings.xml
Файл поврежден или недействителен... Но я понятия не имею, как его отладить или с чего начать.
2 ответа
Я нашел, что было не так с моей конфигурацией.
В моей родительской иерархии пом, один из родительских пом также настраивал что-то для jaxws-maven-plugin
и ожидал, что я установлю некоторые свойства. Поэтому в конфигурации, которую я здесь представил, не было ничего плохого.
Проблема с "ссылками на SCD" возникла из-за неработающей конфигурации (определенной в родительском pom)
О ссылках на SCD вы можете прочитать здесь: Как заставить клиента JAX-WS повторно использовать существующие классы для привязки данных
У меня возникла та же проблема, когда я пытался использовать эпизоды. У меня был набор схем из файла JAR, и я должен расширить одну из схем из него. Таким образом, у меня было два плана выполнения в моем помпе как ниже.
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>JAXB Generation - canonical schemas</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<id>JAXB Generation</id>
<goals>
<goal>generate</goal>
</goals>
<extension>true</extension>
<args>
<arg>-Xannotate</arg>
<arg>-XtoString</arg>
<arg>-enableIntrospection</arg>
<arg>-extension</arg>
<arg>-Xnamespace-prefix</arg>
<arg>-XJsr303Annotations</arg>
<arg>-XJsr303Annotations:notNullAnnotationsCustomMessages=ClassName</arg>
</args>
<schemaDirectory>${project.build.directory}/dependency</schemaDirectory>
<bindingDirectory>${project.basedir}/src/main/bindings</bindingDirectory>
<generateDirectory>${project.build.directory}/generated-sources/xjc</generateDirectory>
<bindingIncludes>
<include>RootElements-v1-binding.xjb</include>
<include>global-binding.xjb</include>
</bindingIncludes>
<scanDependenciesForBindings>false</scanDependenciesForBindings>
<schemaIncludes>
<include>**/*.xsd</include>
</schemaIncludes>
<catalog>src/main/resources/catalog/catalog.cat</catalog>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
</plugin>
<plugin>
<groupId>com.github.krasa</groupId>
<artifactId>krasa-jaxb-tools</artifactId>
<version>1.4</version>
</plugin>
</plugins>
</configuration>
</execution>
<execution>
<id>JAXB Generation - extended schema</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<id>JAXB Generation</id>
<goals>
<goal>generate</goal>
</goals>
<extension>true</extension>
<args>
<arg>-Xannotate</arg>
<arg>-XtoString</arg>
<arg>-enableIntrospection</arg>
<arg>-extension</arg>
<arg>-Xnamespace-prefix</arg>
<arg>-XJsr303Annotations</arg>
<arg>-XJsr303Annotations:notNullAnnotationsCustomMessages=ClassName</arg>
</args>
<strict>false</strict>
<schemaIncludes>
<include>MyExtendedSchema_v1.xsd</include>
</schemaIncludes>
<generateDirectory>${project.build.directory}/extended/generated-sources/xjc</generateDirectory>
<catalog>src/main/resources/catalog/catalog.cat</catalog>
<episode>true</episode>
<episodeFile>${project.build.directory}/generated-sources/xjc/META-INF/sun-jaxb.episode</episodeFile>
<addIfExistsToEpisodeSchemaBindings>true</addIfExistsToEpisodeSchemaBindings>
<episodes>
<episode>
<groupId>com.comp.domain</groupId>
<artifactId>my-current-artifact-id</artifactId>
<version>appropriate version</version>
</episode>
</episodes>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
</plugin>
<plugin>
<groupId>com.github.krasa</groupId>
<artifactId>krasa-jaxb-tools</artifactId>
<version>1.4</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-namespace-prefix</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</plugin>
Но XJC продолжал жаловаться мне на то, что SCD "x-schema::tns" не соответствует какой-либо проблеме компонента схемы из сгенерированного файла эпизода sun-jaxb.episode, который находится в target/generate-sources/xjc/META-INF.
{<bindings scd="x-schema::tns" xmlns:tns="urn:com:corp:domain:entities:v1">
Я выделил пример кода из моего сгенерированного файла эпизода.
Мне пришлось импортировать все пространства имен / схемы, которые указаны в файле эпизода, независимо от того, что мне действительно не нужно было их все в моей расширенной схеме. Я знаю, что это немного раздражает, но похоже, что нет никакой реальной работы вокруг за это.
Несмотря на то, что есть некоторые ссылки, в которых говорится, что конфигурация addIfExistsToEpisodeSchemaBindings поможет исправить проблему, но это не помогло мне. Просто опубликовать это в случае, если кто-то еще борется с той же проблемой.