Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Soap et big binary files

6 réponses
Avatar
Franck
Bonjour,

J'appelle via Axis un webservices. Dans la réponse de celui-ci se
trouve un fichier PDF base64-encodé.
Lorsque le fichier PDF pese dans les 20 mo, l'appel au webservices
prend a peu pres 2 minutes et le process java associé monte en heap
jusqu'a ~400 mo
Cela vous parait-il normal ?
Voyez-vous un moyen d'optimiser ce comportement ?

Merci d'avance
Franck

--
-
Franck
mailto:flefebure2.NO@SPAM.orangecaraibe.com

6 réponses

Avatar
Arnaud W.
On 28 fév, 16:17, "Franck"
wrote:
Voyez-vous un moyen d'optimiser ce comportement ?


Il faudrait que le fichier soit lu et transmis sous forme de message
SOAP avec attachement, l'attachement étant envoyé sous forme de flux
(reste à savoir si Axis le gère comme un flux, i.e. sans le charger
entièrement en mémoire)

Remarque : Il y a 4-5 ans (avec Axis 1.0), j'avais déjà un problème
qui annulait l'intérêt du streaming : les données étaient transfé rés
via un cache, qu'il était impossible de désactiver, et donc les
données ne commençaient à être envoyées qu'après que le flux so it
entièrement lu (donc terminé) et stocké dans le cache.

Je n'ai pas testé avec les dernières versions (Axis 2), mais j'espère
que cela a été optimisé....

Arnaud W.

Avatar
Franck
Salut,

D'apres ce que je comprends, avec Axis ou SAAJ, on peut traiter le flux
binaire en "streaming" quand il est renvoyé sous forme de piece jointe
(Attachment) au flux XML (cad apres le </xml>).

Or ça n'a pas l'air d'etre mon cas : la réponse que j'ai a traiter est
de cette forme :

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SearchPdfResponse
xmlns="http://tempuri.org/HypDataPdf/HypDataPdf">
<SearchPdfResult>boolean</SearchPdfResult>
<binarydata>base64Binary</binarydata>
<msgerr>string</msgerr>
</SearchPdfResponse>
</soap:Body>
</soap:Envelope>

Du coup je crois bien que le binaire est forcemment monté en mémoire..

Je me trompe ?

Merci,
Franck

--
-
Franck
mailto:
Avatar
TestMan
Bonjour,

J'appelle via Axis un webservices. Dans la réponse de celui-ci se trouve
un fichier PDF base64-encodé.
Lorsque le fichier PDF pese dans les 20 mo, l'appel au webservices prend
a peu pres 2 minutes et le process java associé monte en heap jusqu'a
~400 mo
Cela vous parait-il normal ?
Voyez-vous un moyen d'optimiser ce comportement ?

Merci d'avance
Franck



Bonjour,

Celà ne me choque pas, par contre un flux SOAP de plusieurs dizaines de
méga, oui ;-)

Avez-vous un contrôle quelconque sur le WS qui génére le PDF ?
Si non, insultez ce qui vous génére un appel webservice en retournant
des fichiers d'une telle taille :o) Si vous avez la chance que le
serveur soit compatible FastInfoset, vous pouvez essayer cette voie :
http://java.sun.com/webservices/docs/1.6/jaxrpc/fastinfoset/manual.html#d0e103

Si oui, utilisez une plateforme de partage de donnée (un "bon vieux"
apache slide fera l'affaire) et poussez le fichier dessus (avec les
droits qui vont bien, hein) et ensuite simplement retourner l'appel
service avec une simple URL vers le document en question ...

En espérant que ce soit la seconde solution pour vous ;-)

A+
TM

Avatar
Franck
Eh ben non je n'ai pas la main sur l'usine à gaz qui me sert le
webservices :-(
Je vais regarder l'outil que tu cites

Merci,
Franck

--
-
Franck
mailto:
Avatar
TestMan
Eh ben non je n'ai pas la main sur l'usine à gaz qui me sert le
webservices :-(
Je vais regarder l'outil que tu cites

Merci,
Franck

Attention, une certaine société N°1 du secteur interdit d'accoler "usine

à gaz" et "webservice" ... par contre on peut remplacer ça par "moderne
et performant", "simple et interropérable" voire "qui fait le café et
fabrique des twix" ... :o) :o) :o)

Peu de chance pour toi que le fabricant de twix fasse du FI, je le crain
... Bon courrage tout de même !

A+
TM

Avatar
Arnaud W.
On 1 mar, 18:43, "Franck"
wrote:
Salut,

D'apres ce que je comprends, avec Axis ou SAAJ, on peut traiter le flux
binaire en "streaming" quand il est renvoyé sous forme de piece jointe
(Attachment) au flux XML (cad apres le </xml>).

Or ça n'a pas l'air d'etre mon cas : la réponse que j'ai a traiter est
de cette forme :

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SearchPdfResponse
xmlns="http://tempuri.org/HypDataPdf/HypDataPdf">
<SearchPdfResult>boolean</SearchPdfResult>
<binarydata>base64Binary</binarydata>
<msgerr>string</msgerr>
</SearchPdfResponse>
</soap:Body>
</soap:Envelope>

Du coup je crois bien que le binaire est forcemment monté en mémoire..

Je me trompe ?


Je pense effectivement que tout le fichier est monté en mémoire dans
ce cas. Il faut, si c'est possible, utiliser les attachements et le
streaming (options qui dépendent de l'implémentation utilisée).

Arnaud W.