Kora фреймворк для написания Java / Kotlin приложений с упором на производительность, эффективность, прозрачность сделанный разработчиками Т-Банк / Тинькофф

Kora is a framework for writing Java / Kotlin applications with a focus on performance, efficiency, transparency made by T-Bank / Tinkoff developers

Перейти к содержанию

SOAP клиент

Модуль для создания и регистрации SOAP сервисов по классам аннотированным javax.jws.WebService/jakarta.jws.WebService.

Подключение

Зависимость build.gradle:

implementation "ru.tinkoff.kora:soap-client"

Модуль:

@KoraApp
public interface Application extends SoapClientModule { }

Зависимость build.gradle.kts:

implementation("ru.tinkoff.kora:soap-client")

Модуль:

@KoraApp
interface Application : SoapClientModule

Требуется подключить реализацию HTTP клиента.

Описание

Подразумевается что у нас есть классы аннотированные javax.jws.WebService/jakarta.jws.WebService, которые могут быть созданы другими средствами, такими как Gradle Plugin.

На основании таких классов с помощью Kora создаются реализации SOAP клиента с суффиксом Impl в том же пакете и регистрирует их как модуль с конфигурацей.

Затем конфигурация и сам SOAP сервис становятся доступны для внедрения зависимостей автоматически.

Конфигурация

Все конфигурации для SOAP клиентов создаются с префиксом soapClient, а основная часть конфигурации клиента находится под именем клиента из WSDL аннотации @WebService, который соответствует зачастую тегу <wsdl:binding type="tns:SimpleService"> в конфигурации WSDL.

Сервис SOAP с именем SimpleService будет иметь конфигурацию с путем soapClient.SimpleService.

Пример полной конфигурации, описанной в классе SoapServiceConfig (указаны примеры значений или значения по умолчанию):

soapClient {
    SimpleService {
        url = "https://localhost:8090" //(1)!
        timeout = "60s" //(2)!
        telemetry {
            logging {
                enabled = false //(3)!
            }
            metrics {
                enabled = true //(4)!
                slo = [ 1, 10, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000, 60000, 90000 ] //(5)!
            }
            tracing {
                enabled = true //(6)!
            }
        }
    }
}
  1. URL сервиса куда будут отправляться запросы (обязательный)
  2. Максимальное время запроса
  3. Включает логгирование модуля (по умолчанию false)
  4. Включает метрики модуля (по умолчанию true)
  5. Настройка SLO для DistributionSummary метрики
  6. Включает трассировку модуля (по умолчанию true)
soapClient:
  SimpleService:
    url: "https://localhost:8090" #(1)!
    timeout: "60s" #(2)!
    telemetry:
    logging:
        enabled: false #(3)!
      metrics:
        enabled: true #(4)!
        slo: [ 1, 10, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000, 60000, 90000 ] #(5)!
      telemetry:
        enabled: true #(6)!
  1. URL сервиса куда будут отправляться запросы (обязательный)
  2. Максимальное время запроса
  3. Включает логгирование модуля (по умолчанию false)
  4. Включает метрики модуля (по умолчанию true)
  5. Настройка SLO для DistributionSummary метрики
  6. Включает трассировку модуля (по умолчанию true)

Использование

После создания всех компонент созданный SOAP сервис становится доступен для внедрения, ниже показан пример для SimpleService сервиса:

@Component
public final class SomeService {

    private final SimpleService service;

    public SomeService(SimpleService service) {
        this.service = service;
    }
}
@Component
class SomeService(val service: SimpleService) {

}

Плагин wsdl2java

Gradle Plugin может использоваться как один из вариантов для создания классов аннотированных javax.jws.WebService/jakarta.jws.WebService на основании WSDL.

Подключение

Плагин build.gradle:

plugins {
    id "com.github.bjornvester.wsdl2java" version "2.0.2"
}

Плагин build.gradle.kts:

plugins {
    id("com.github.bjornvester.wsdl2java") version ("2.0.2")
}

Использование

Предположим что у нас есть WSDL, где объявлен сервис SimpleService то настройка плагина для jakarta аннотацией будет выглядить так:

Настройка плагина build.gradle:

wsdl2java {
    cxfVersion = "4.0.2"
    wsdlDir = layout.projectDirectory.dir("src/main/resources/wsdl")
    useJakarta = true
    markGenerated = true
    verbose = false
    packageName = "ru.tinkoff.kora.generated.soap"
    generatedSourceDir.set(layout.buildDirectory.dir("generated/sources/wsdl2java/java"))
    includesWithOptions = [
        "**/simple-service.wsdl": ["-wsdlLocation", "https://kora.tinkoff.ru/simple/service?wsdl"],
    ]
}

Настройка плагина build.gradle.kts:

wsdl2java {
    cxfVersion = "4.0.2"
    wsdlDir = layout.projectDirectory.dir("src/main/resources/wsdl")
    useJakarta = true
    markGenerated = true
    verbose = false
    packageName = "ru.tinkoff.kora.generated.soap"
    generatedSourceDir.set(layout.buildDirectory.dir("generated/sources/wsdl2java/java"))
    includesWithOptions.putAll(
        mapOf(
            "**/simple-service.wsdl" to listOf(
                "-wsdlLocation",
                "https://kora.tinkoff.ru/simple/service?wsdl"
            )
        )
    )
}