2012-01-10 5 views
1

J'essaye d'écrire un gros fichier XML (supérieur à 1,5M) sur un ServletOutputStream et cela prend vraiment beaucoup de temps, près de 7 minutes ou plus.
Ce que je fais est quelque chose comme suit: -ServletOutputStream prend trop de temps à écrire

1. SOAPMessage soapRes; // Consider this is populated somewhere and we have the value here 
2. ServletResponse res; // Consider this is populated somewhere and we have the value here 
3. ServletOutputStream os = res.getOutputStream(); 
4. ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
5. soapRes.writeTo(baos); 
6. os.write(baos.toByteArray()); 

en enfin -

7. baos.close(); 
8. os.flush(); 
9. os.clse(); 

Je pensais à la sous-classe de ServletOutputStream et redéfinissant la write() mais ne peux pas en raison de problème de fonte de classe à la ligne # 3.
J'ai également essayé d'extraire la longueur du contenu à partir du SOAPMessage et de passer cette valeur dans la méthode write() à la ligne 6 et même comme argument de constructeur pour ByteArrayOutputStream lin e # 4 mais aucun ne fonctionne.
Toute suggestion est la bienvenue.

NB. J'ai oublié de mentionner cela plus tôt, je cours cela sur un Apache Tomcat. Un test JUnit n'a pas un tel problème, avec ce traitement est très rapide et se fait en quelques secondes, mais quand je l'exécute sur Tomcat, prend beaucoup de temps. Comme mentionné dans les commentaires de la question, trouvé la réponse.

+0

Depuis la source est 1.5Mb +, il va certainement prendre un certain temps. Il peut cependant y avoir des méthodes d'optimisation. Tout d'abord, s'agit-il d'un message SOAP ou d'un simple message XML? Et voulez-vous seulement sortir le corps SOAP? Et maintenant je réfléchis à la façon d'implémenter le modèle de CONTENT CHUNKING pour votre question. Les petits octets seront écrits en sortie, puis affichés, puis un autre petit octet .... à moins que la fin du fichier ne soit atteinte. Est-ce que je pense bien? – Acn

+0

@ Swift-Tuttle: Pourquoi pensez-vous que 'ServletOutputStream' est le problème? Avez-vous identifié quelles méthodes et quelles lignes de code gaspillent tant de temps? Êtes-vous certain que ce n'est pas le client qui n'est pas capable de consommer les données suffisamment rapidement? – Codo

+0

Ce n'est pas un texte en XML, mais un message SOAP et je veux que tout le message et pas seulement le corps, mais ayant dit cela serait intéressé de voir ce que la solution pour le corps serait. Je pourrais essayer de l'utiliser en quelque sorte. J'ai mis à jour la question avec quelques informations supplémentaires. –

Répondre

0


Le problème était le client (TCPMon) plutôt que le code.