Java : Web services client

This page last changed on Oct 18, 2006 by Kees de Kooter

Intro

Er bestaan vele manieren in Java een SOAP client te bouwen. De overeenkomst is dat ze allemaal uiterst summier to t in het geheel niet gedocumenteerd zijn. De frameworks hebben de serverkant uitgebreid bestreken. De client kant is blijkbaar een ondergeschoven kindje.

Wat we zoeken is een oplossing om de met JAXB gemarshalde objecten over SOAP naar de LV te verzenden. Op basis van de inhoud van het antwoordbericht wordt verdere actie ondernomen. De oplossing moet odersteuning bieden voor minimaal HTTP Basic authenticatie, HTTPS protocol en HTTP proxy servers.

Samenvatting

Framework

Documentatie

Actief

Authenticatie

Proxy

HTTPS

Axis 2 (1.1)

(plus)

(tick)

(tick)

(tick)

(tick)

JAX-WS 2.0

(plus)

(tick)

(tick)

(question)

(question)

XFire 1.2

(plus)

(tick)

(question)

(question)

(question)

Spring-WS 1.0

(plus)

(tick)

(question)

(question)

(question)

Axis 1

(plus)(plus)

(error)

(tick)

(tick)

(question)

SAAJ 1.2

(plus)(plus)

(tick)

(tick)

(question)

(question)

Axis 1

Client kant redelijk goed gedocumenteerd. Is echter opgevolgd door Axis 2.

Axis 2

Twee keer zo snel als Axis 1. Ook twee keer zo beroerd gedocumenteerd. Authenticatie kan worden gerealiseerd met de rampart module, een implementatie van de WS-Security specificatie.

De (nog niet officiƫle) release versie 1.1 biedt een API voor http authenticatie. Axis gebruikt de commons http client en maakt het type authenticatie transparant. Commons http biedt ook support voor https.

Spring-WS 1.0

Veelbelovend vanwege de uitgangspunten: document-centric, contract first, "Spring-WS is meant for Public Web Services". Echter nog geen definitieve release beschikbaar en gebrekkig gedocumenteerd.

XFire 1.2

Een server-side georiƫnteerde library die goed integreert met Spring, gericht op het transparant maken van SOAP vanuit Java gezien. Ook hier is client kant slecht gedocumenteerd.

XFire wordt overigens als server component aan de kant van de Landelijke Voorziening gebruikt.

JAX-WS 2.0 (JSR 181)

Onderdeel van de JEE 5 specificatie en daarom de voorkeursoplossing.

Sun gaat er vanuit dat je dit vanuit een IDE gebruikt. Nauwelijks documentatie beschikbaar voor het met de hand coderen van annotations.

Een alternatief is de "Dispatch" benadering. Zie JAX-WS Dispatch. Probleem is echter dat de Content-Type header die wordt gegenereerd (text/xml) door de server niet gepikt wordt.

SAAJ

Oftewel SOAP with Attachments API for Java. Deze specificatie bestaat al een aantal jaren. De opzet van een bericht is heel eenvoudig en begrijpelijk. Toevoegen van authenticatie is wat minder duidelijk. Basic authenticatie kan door username/password aan de url toe te voegen. Dit is echter ongewenst. Een betere manier is om de authenticatie via de mime headers te doen (zie resources onderaan):

MimeHeaders mimeHeaders = message.getMimeHeaders();
String authorization = Base64Coder.encode(username + ":" + password);

Unit testing Webservices

SoapUI.

Resources

http://faq.javaranch.com/view?WebServicesHowTo