WebServiceTemplate (dept44-starter-webservicetemplate)
Denna starter skapar en WebServiceTemplate med HttpClient som underliggande klient för att göra SOAP-anrop.
Lägg till följande i tjänstens pom.xml
<dependency>
<groupId>se.sundsvall.dept44</groupId>
<artifactId>dept44-starter-webservicetemplate</artifactId>
</dependency>
Modulen tillhandahåller en WebServiceTemplateBuilder
för att sätta upp en WebServiceTemplate
:
WebServiceTemplate webServiceTemplate = new WebServiceTemplateBuilder()
.withBaseUrl(http://example.com:8080) [1]
.withPackageToScan("se.sundsvall.client") [2]
.withPackagesToScan(List.of("se.sundsvall.client2", "se.sundsvall.client3")) [3]
.withClientInterceptor(new CustomSoapClientInterceptor()) [4]
.withReadTimeout(Duration.ofMillis(10000L)) [5]
.withConnectTimeout(Duration.ofMillis(5000L))) [6]
.withLogbook(logbook) [7]
.withKeyStoreFileLocation("classpath:keystore.p12") [8]
.withKeyStorePassword("password-for-keystore") [9]
.withBasicAuthentication("username", "password") [10]
.build(); [11]
[1]
Anger bas-URL för klienten som skapas.[2]
Vilket paket som skall scannas efter JAXB2-annoteringar. Kan användas flera gånger samt i kombination med [3]
.[3]
Anger flera paket som skall scannas efter JAXB2-annoteringar.[4]
Anger om specifika interceptorer skall användas. Går att använda flera gånger för att lägga till fler än en inerceptor.[5]
Anger read timeout. Default-värde är 60 sekunder.[7]
Sätter upp request- och response-loggning.[8]
Anger en keystore i form av t.ex. en classpath ("classpath:keystore.p12"
), måste användas i kombination med [9]
.[9]
Lösenord för keystore[10]
Om angiven (användarnamn och lösenord) sätts Basic-autentisering upp.[11]
Skapar upp klienten
Användning
SomeObject response = (SomeObject) webServiceTemplate.marshalSendAndReceive(someRequest);
Vanliga problem
Viktigt att tänka på är att de klasser som scannas har annoteringen @XmlRootElement
, annars kommer tjänsten förmodligen slänga ur sig någonting i stil med:Unable to marshal type "SomeObject" as an element because it is missing an @XmlRootElement annotation
För att råda bot på det kan man göra på följande vis när klient-klasserna genereras, det som skapar @XmlRootElement
-taggarna är bindings-filen:
bindings.xjb
Todo
Stöd för oauth2
…