У меня есть WSDL и файлы схемы, предоставленные клиентом. Мне нужно создать веб-службу SOAP Spring -boot с этим файлом WSDL. У меня есть google и все примеры, которые я могу найти, они автоматически генерируют wsdl с помощью spring. Как я могу использовать WSDL для создания SOAP-сервиса?
Как использовать WSDL с spring -boot?
Ответ 1
Ниже приведены общие шаги для использования существующего wsdl с Spring -Ws и Spring -boot.
Класс конфигурации
@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;
}
}
- В вашем pom.xml используйте плагин jaxb2-maven-plugin для генерации классов из вашего wsdl.
- В Spring -WS вам нужно написать конечную точку самостоятельно. Нет генерации кода для конечных точек. Его легко написать. вы можете следовать руководству/руководству на веб-сайте spring.
Ответ 2
Существует несколько вариантов представления веб-службы, начиная с файла WSDL и используя Spring Boot. Обычно вы генерируете свои классы Java из определения WSDL. Существует ряд плагинов JAXB Maven, которые помогут вам в этом.
Кроме того, при использовании Spring Boot убедитесь, что вы используете преимущества весенних загрузчиков, чтобы автоматически управлять различными необходимыми зависимостями.
Один из подходов заключается в использовании Spring Web Services в сочетании с maven-jaxb2-plugin
plugin. Я создал пошаговое руководство, в котором объясняется, как сделать это с помощью Spring-WS, начиная с файла WSDL для потребителя и поставщика.
Другой альтернативой является использование фреймворка вроде Apache CXF в сочетании с cxf-codegen-plugin
plugin. CXF также поставляется с собственным стартером CXF Spring Boot, который называется cxf-spring-boot-starter-jaxws
. Чтобы начать, я скомпилировал пример, который использует стартер CXF в сочетании с Spring Boot для создания веб-сервиса, начинающегося с файла WSDL.
Ответ 3
SOAP (первоначально Simple Object Access Protocol) - это спецификация протокола для обмена структурированной информацией при реализации веб-сервисов в компьютерных сетях. SOAP позволяет обрабатывать процессы, работающие на разрозненных операционных системах (например, Windows и Linux), с использованием расширяемого языка разметки (XML).
SOAP может использоваться в сочетании с WSDL, который стандартизован, что означает, что люди, знающие стандарт (WSDL), могут узнать из него, какие операции предлагает веб-сервис и как обмен данными.
Эти знания могут быть использованы для создания инструментов, которые генерируют безопасные типы/объекты привязки типа из файла WSDL.
Эти сгенерированные классы (для создания RPC) могут использоваться без необходимости ручного внедрения запросов и кодирования/анализа данных, которые обмениваются.
Используя maven-jaxb2-plugin, мы можем генерировать требуемые классы, необходимые из 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>
Далее, используя ServletRegistrationBean, мы регистрируем MessageDispatcherServlet с помощью Spring Boot. Во время этой регистрации шаблон URI для сервлета устанавливается в /javainuse/ws/ *. Используя этот путь, веб-контейнер будет отображать входящие HTTP-запросы в MessageDispatcherServlet. DefaultWsdl11Definition предоставляет стандартный WSDL 1.1, используя указанный файл WSDL Hello World. MessageDispatcherServlet также автоматически определяет любое WsdlDefinition, определенное в контексте приложения.
Подробное объяснение вместе с видеоуроком доступно здесь: Spring Первый пример контракта на загрузку и SOAP веб-сервисов
Ответ 4
Самый простой способ - просто использовать cxf-spring-boot-starter incl. Это дополнение к плагину Maven, они позаботятся о том, чтобы генерировать в основном все необходимое из ваших файлов wsdl и schema. Вот полный пример: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple.
Используя стартер в вашем pom.xml
, вам просто нужно поместить файлы wsdl & schema в src/main/resources
и вы в основном все сделали. Вот полный пример 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>
Ответ 5
Вы можете создать Java-класс WebServiceConfiguration в своих пакетах.
@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, "/ProjectName/*");
}
@Bean(name = "wsdlname")
public DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema cityRequestSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setRequestSuffix("ByCountry");
wsdl11Definition.setResponseSuffix("City");
wsdl11Definition.setPortTypeName("Hotelport");
wsdl11Definition.setLocationUri("/ProjectName");
wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
wsdl11Definition.setSchema(cityRequestSchema);
return wsdl11Definition;
}
@Bean
public XsdSchema cityRequestSchema() {
return new SimpleXsdSchema(new ClassPathResource("CityRequest.xsd"));
}
После запуска в качестве spring загрузочного приложения... затем скопируйте этот url в свой браузер. http://localhost:8080/ProjectName/wsdlname.wsdl
отметил: localhost: 8080 заменить на ваш порт tomcat
Ответ 6
Самый простой способ - просто использовать cxf-spring-boot-starter incl. Это дополнение к плагину Maven, они позаботятся о том, чтобы генерировать в основном все необходимое из ваших файлов wsdl и schema. Вот полный пример: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple.
Используя стартер в вашем pom.xml
, вам просто нужно поместить файлы wsdl & schema в src/main/resources
и вы в основном все сделали. Вот полный пример 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>