Je dispose d'une application Web qui constitue un référentiel pour les fichiers. Cette application Web fournit des services Web qui permettent aux clients de rechercher dans le référentiel et de télécharger les pièces jointes via SOAP.Téléchargement de fichiers volumineux via le service Web en Java
Actuellement, j'ai essayé d'utiliser Spring-WS 1.5.8 avec MTOM pour envoyer la pièce jointe au client, mais je continue à manquer d'erreurs de mémoire. Je ne crois pas que ces erreurs sont liées à mon instance Tomcat 6 parce que mon serveur a 8 Go de mémoire et j'ai configuré Tomcat pour utiliser 4 Go de cela. Je reçois ces erreurs sur des fichiers aussi petits que 200 Mo.
J'ai besoin d'utiliser SOAP, même si ce n'est probablement pas la meilleure approche du tout. Je préférerais une solution au printemps, mais si ce n'est pas possible, je suis ouvert à d'autres idées. J'ai lu que l'on peut utiliser l'AxiomSoapMessageFactory pour diffuser des fichiers sur le serveur à des fins de téléchargement, mais pas l'inverse. Est-ce vrai? J'utilise Java 6.
Voici l'erreur que je continue à obtenir dans le cadre du printemps WS:
java.lang.OutOfMemoryError: Java heap space
com.sun.xml.internal.messaging.saaj.util.ByteOutputStream.ensureCapacity(Unknown Source)
com.sun.xml.internal.messaging.saaj.util.ByteOutputStream.write(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.BMMimeMultipart.find(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.BMMimeMultipart.readBody(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.BMMimeMultipart.getNextPart(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.BMMimeMultipart.parse(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.BMMimeMultipart.parse(Unknown Source)
com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart.getCount(Unknown Source)
com.sun.xml.internal.messaging.saaj.soap.MessageImpl.initializeAllAttachments(Unknown Source)
com.sun.xml.internal.messaging.saaj.soap.MessageImpl.getAttachments(Unknown Source)
org.springframework.ws.soap.saaj.Saaj13Implementation.getAttachment(Saaj13Implementation.java:305)
org.springframework.ws.soap.saaj.SaajSoapMessage.getAttachment(SaajSoapMessage.java:226)
org.springframework.ws.support.MarshallingUtils$MimeMessageContainer.getAttachment(MarshallingUtils.java:109)
org.springframework.oxm.jaxb.Jaxb2Marshaller$Jaxb2AttachmentUnmarshaller.getAttachmentAsDataHandler(Jaxb2Marshaller.java:532)
com.sun.xml.internal.bind.v2.runtime.unmarshaller.MTOMDecorator.startElement(Unknown Source)
com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(Unknown Source)
com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(Unknown Source)
com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)
com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:421)
org.springframework.ws.support.MarshallingUtils.unmarshal(MarshallingUtils.java:62)
org.springframework.ws.client.core.WebServiceTemplate$3.extractData(WebServiceTemplate.java:374)
org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:560)
Pouvez-vous poster une partie de votre code? À quoi correspondent vos délais d'expiration? –
Veuillez noter que OutOfMemoryErros apparaît * n'importe où *, mais pas nécessaire là où le câlin de mémoire est vraiment. Si vous avez d'autres applications qui exécutent la mémoire de fuite, vous risquez de bloquer votre application simplement parce qu'elle est la dernière de la chaîne. – mhaller