J'ai WSDL et fichiers de schéma fournis par le client. J'ai besoin de créer le service Web Spring-boot SOAP avec ce fichier WSDL. Je l'ai google et tous les exemples que je peux trouver, ils ont généré automatiquement le WSDL avec spring. Comment puis-je utiliser mon WSDL pour générer le service SOAP?
Voici les étapes à suivre pour utiliser votre WSDL existant avec Spring-Ws et Spring-Boot.
Classe de configuration
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/ws/*");
}
//http://localhost:8080/ws/services.wsdl --bean name is set to 'services'
@Bean(name = "services")
public Wsdl11Definition defaultWsdl11Definition() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("/schema/MyWsdl.wsdl")); //your wsdl location
return wsdl11Definition;
}
}
Un certain nombre d'options permettent d'exposer un service Web à partir d'un fichier WSDL et à l'aide de Spring Boot. Vous devez généralement générer vos classes Java à partir de la définition WSDL. Un certain nombre de plugins JAXB Maven vous aideront à le faire.
De plus, lorsque vous utilisez Spring Boot, assurez-vous de tirer parti de spring-boot-starters afin de gérer automatiquement les différentes dépendances nécessaires.
Une approche consiste à utiliser les services Web Spring en combinaison avec le plugin maven-jaxb2-plugin
. J'ai créé un didacticiel pas à pas qui explique comment utiliser Spring-WS à partir d'un fichier WSDL pour le consommateur et le fournisseur .
Une autre alternative consiste à utiliser un framework tel que Apache CXF en combinaison avec le plugin cxf-codegen-plugin
. CXF est également livré avec son propre démarreur CXF Spring Boot appelé cxf-spring-boot-starter-jaxws
. Afin de vous aider à démarrer, j'ai compilé un exemple qui utilise le démarreur CXF en combinaison avec Spring Boot pour créer un service Web à partir d'un fichier WSDL .
SOAP (à l'origine Simple Object Access Protocol) est une spécification de protocole permettant d'échanger des informations structurées lors de la mise en œuvre de services Web dans des réseaux informatiques. SOAP permet aux processus s'exécutant sur différents systèmes d'exploitation (tels que Windows et Linux) de communiquer à l'aide du langage XML (Extensible Markup Language). SOAP peut être utilisé avec WSDL, qui est normalisé, ce qui signifie que les personnes connaissant le standard (WSDL) peuvent apprendre quelles opérations un service Web offre et comment les données sont échangées . Ces connaissances peuvent être utilisées pour créer des outils qui génèrent des classes/objets de classeur de type sécurisé en dehors du fichier WSDL . Ces classes générées (pour créer des RPC) peuvent être utilisées sans avoir à implémenter manuellement les demandes et à coder/analyser les données échangées .
En utilisant maven-jaxb2-plugin, nous pouvons générer les classes requises à partir de wsdl.
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven-jaxb2-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
</configuration>
</plugin>
Ensuite, en utilisant ServletRegistrationBean, nous enregistrons le MessageDispatcherServlet avec Spring Boot . Pendant cet enregistrement, le modèle d'URI de mappage de servlet est défini sur/javainuse/ws/*. En utilisant ce chemin, le conteneur Web mappera les demandes HTTP entrantes au MessageDispatcherServlet. DefaultWsdl11Definition expose un WSDL 1.1 standard à l'aide du fichier WSDL Hello World spécifié. MessageDispatcherServlet détecte également automatiquement toute définition WsdlDefinition définie dans son contexte d'application.
L'explication détaillée avec le didacticiel vidéo est disponible ici- Spring Boot + SOAP Premier exemple de contrat de services Web
Le moyen le plus simple consiste à utiliser simplement le cxf-spring-boot-starter } incl. c'est compagnon Maven plugin } _, ils s'occuperont de générer principalement tout ce qui est nécessaire à partir de vos fichiers wsdl et schema. Voici un exemple complet: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple .
En utilisant le starter dans votre pom.xml
, il vous suffit de placer les fichiers de schéma wsdl & dans src/main/resources
et vous avez presque terminé. Voici un exemple complet pom.xml :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.codecentric.soap</groupId>
<artifactId>cxf-boot-simple</artifactId>
<version>2.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cxf-boot-simple</name>
<description>Demo project for using Spring Boot Starter CXF</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<Java.version>1.8</Java.version>
</properties>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>cxf-spring-boot-starter</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>de.codecentric</groupId>
<artifactId>cxf-spring-boot-starter-maven-plugin</artifactId>
<version>2.0.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>