...
Modulen tillhandahåller en WebServiceTemplateBuilder
för att sätta upp en WebServiceTemplate
:
Code Block | ||
---|---|---|
| ||
WebServiceTemplateBuilderWebServiceTemplate builderwebServiceTemplate = 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] .withKeyStore(keyStoreResource). withKeyStoreFileLocation("classpath:keystore.p12") [8] .withKeyStorePassword("password-for-keystore") [9] .withBasicAuthentication("username", "password") [10] .build(); [11] |
[1]
Anger bas-URL för REST- klienten som skapas.[2]
Vilket paket som skall scannas efter JAXB2-annoteringar. Kan användas flera gånger samt i kombination med #3 [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.Anger connect timeout. Default-värde är 10 sekunder.[7]
Sätter upp request- och response-loggning.[8]
Anger en keystore i form av en Resourcet.ex. en classpath ("classpath:keystore.p12"
), måste användas i kombination med #9 [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
Code Block | ||
---|---|---|
| ||
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:
Code Block | ||
---|---|---|
| ||
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<!-- Fluent builder dependency for generated classes -->
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-fluent-api</artifactId>
<version>3.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<xjbSources>
<xjbSource>${basedir}/src/main/resources/xjb/bindings.xjb</xjbSource>
</xjbSources>
<!-- Enable fluent -->
<arguments>
<argument>-Xfluent-api</argument>
</arguments>
<outputDirectory>${generated-sources-folder}</outputDirectory>
<sourceType>wsdl</sourceType>
<sources>
<source>${basedir}/src/main/resources/contracts.wsdl</source>
</sources>
</configuration>
</plugin> |
bindings.xjb
Code Block | ||
---|---|---|
| ||
<!-- Bindings file to add @XmlRootElement to generated classes. -->
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.0"
xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings>
<xjc:simple/>
</jaxb:globalBindings>
</jaxb:bindings> |
Todo
Stöd för oauth2
…