Soap et big binary files

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Arnaud W.
Le #227000
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.

Franck
Le #226999
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 :

<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:
TestMan
Le #226998
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

Franck
Le #226973
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:
TestMan
Le #226969
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

Arnaud W.
Le #227264
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 :

<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.

Publicité
Poster une réponse
Anonyme