Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Code Block
languagexml
<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:

Code Block
languagejava
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

Code Block
languagejava
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
languagexml
<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
languagexml
<!-- 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