2010-09-29 15 views
0

J'utilise le code ci-dessous pour récupérer une pièce jointe d'un serveur Web. Le client dans ce cas est un navigateur Web. Donc actuellement, l'utilisateur fait une requête à un serveur web pour la pièce jointe. Le serveur Web envoie une requête MTOM à un autre serveur pour la pièce jointe. Ce serveur Web attend ensuite que la pièce jointe soit téléchargée avant de commencer à écrire cette pièce jointe dans la réponse. L'utilisateur attend deux fois plus longtemps pour obtenir le fichier. Comment puis-je puiser dans le code Axis2 pour accéder au fichier temporaire afin de pouvoir le diffuser à l'utilisateur lors de sa création? Je sais que cela ne semble pas être la meilleure façon de le faire, mais c'est l'exigence. Je travaille avec de gros fichiers jusqu'à 2 Go, donc attendre deux fois plus longtemps pour recevoir le fichier ne fonctionne pas.Comment diffuser le fichier temporaire Axis 2 MTOM à HttpServletRequest

Options options = new Options(); 
options.setTo(new EndpointReference(this.endpointUrl)); 
options.setTransportInProtocol(Constants.TRANSPORT_HTTP); 
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE); 
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS, Constants.VALUE_TRUE); 
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR, this.tempDirectory); 
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, String.valueOf(this.tempFileSizeThreshold)); 
options.setTimeOutInMilliSeconds(this.serviceRequestTimeOut); 

sender = new ServiceClient(); 
sender.setOptions(options); 

OMElement result = sender.sendReceive(this.getAttachmentPayload(productId, attachmentId)); 

OMElement attachmentElement = result.getFirstElement(); 

Iterator<OMElement> elementIterator = attachmentElement.getChildElements(); 

String fileName = ""; 
DataHandler dataHandler = null; 

while (elementIterator.hasNext()) { 
    OMElement element = elementIterator.next(); 

    if (element.getQName().getLocalPart().equals("name")) { 
     fileName = element.getText(); 
    } else if (element.getQName().getLocalPart().equals("attachment")) { 
     dataHandler = (DataHandler) ((OMText) element.getFirstOMChild()).getDataHandler(); 
    } 
} 

Répondre

0
org.w3.www._2005._05.xmlmime.Base64Binary b64data = ---YOUR_SOURCE_ATTACHMENT---; 

org.apache.axiom.attachments.CachedFileDataSource ds = (CachedFileDataSource) b64data.getBase64Binary().getDataSource(); 

String absPath = ds.getFile().getAbsolutePath();