Как создать файл *.xjb из WSDL?
У меня есть файл WSDL weatherservice.wsdl
и я пытаюсь создать привязку для этого WSDL с помощью xjc
, Как мне сделать это с помощью xjc?
Я не нашел никаких аргументов командной строки, чтобы сделать это из xjc. xjc -p com -wsdl weatherservice.wsdl
2 ответа
Обычно мы создаем файл привязок с .xjb
расширение для разрешения любых конфликтов в WSDL или схеме. Например, если два элемента имеют одно и то же имя и вы хотите различать их, вы можете переименовать один, указав в нем файл связываний.
Вот пример:
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
version="2.1">
<jaxb:globalBindings generateIsSetMethod="true" fixedAttributeAsConstantProperty="true">
<xjc:serializable uid="1" />
</jaxb:globalBindings>
<jaxb:bindings schemaLocation="abcd.xsd">
<jaxb:bindings node="//xs:element[@name='Event']/xs:simpleType">
<jaxb:typesafeEnumClass name="EventEnumType" />
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Ниже код будет сохранен как расширение.xjb и добавлен в пакет ресурсов. ресурс -> папка xjb -> binding.xjb
<bindings version="2.0" xmlns="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"
xmlns:annox="http://annox.dev.java.net">
<globalBindings>
<xjc:simple/>
</globalBindings>
</bindings>
Вы можете сделать это через плагин Maven, который немного упрощает и немного усложняет.
Для этого потребуется несколько XSD и применить XJB для создания классов Java:
<!-- Docs:
Maven plugin: http://cxf.apache.org/cxf-xjc-plugin.html
XJC: https://javaee.github.io/jaxb-v2/doc/user-guide/ch04.html
https://tech.boldare.com/make-jaxb-great-again/
-->
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>${version.cxf-xjc}</version>
<configuration>
<sourceRoot>${basedir}/target/generated-sources/main/java</sourceRoot>
<xsdOptions>
<xsdOption>
<extension>true</extension>
<xsd>${xsdsBaseDir}/someService/some-soap-service.xsd</xsd>
<!-- Args to XJC execution -->
<extensionArgs>
<extensionArg>-XautoNameResolution</extensionArg>
<extensionArg>-encoding</extensionArg><extensionArg>UTF-8</extensionArg>
</extensionArgs>
</xsdOption>
<xsdOption>
<!-- another XSD... -->
</xsdOption>
</xsdOptions>
<extensions>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-wsdlextension:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-boolean:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-ts:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-bug671:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-bug986:${version.cxf-xjc}</extension>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-javadoc:${version.cxf-xjc}</extension>
<!--
-->
</extensions>
</configuration>
<executions>
<execution>
<id>generate-from-xsds</id><phase>generate-sources</phase><goals><goal>xsdtojava</goal></goals>
</execution>
</executions>
</plugin>
Две ошибки:
- Плагин не может принимать значения по умолчанию из конфигурации выполнения - должен быть установлен в конфигурации уровня плагина.
- Вам нужно будет добавить источники в реактор, если у вас есть несколько тестов схемы в том же модуле.