2010-07-27 22 views
1

Nous avons un service Web activé MMD qui est publié avec Grails et le plugin Metro 1.0.2:L'utilisation de Metro, l'ajout d'une MTOMFeature au client provoque une exception MIMEParsingException, pourquoi?

@MTOM 
@WebService(targetNamespace="http://com.domain") 
class TestService { 

    @WebMethod 
    int uploadFile(@XmlMimeType("application/octet-stream")DataHandler data) { 

     data.dataSource.inputStream.eachLine { 
      println "reading: -> ${it}" 
     } 
     return 0 
    } 
} 

Suite à cette tutorial, nous avons mis en place un test-client Java qui ressemble à ceci

public class Client { 

    public static void main(String[] argv) { 

     MTOMFeature feat = new MTOMFeature(); 
     TestService service = new TestServiceService().getTestServicePort(feat); 
     Map<String, Object> ctxt = ((BindingProvider)service).getRequestContext(); 
     ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192); 
     service.uploadFile(new DataHandler(new FileDataSource("c:/file.xml"))); 
    } 
} 

Quand je lance le client, je reçois le message d'erreur suivant:

Impossible de créer un message SOAP en raison de exception: org.jvnet.mimepull.MIMEParsingException: manquant limite de début

Cependant, quand je ne fais pas le MTOMFeature, et juste faire TestService service = new TestServiceService().getTestServicePort(); les fichiers téléchargés ok obtient. Mais si je comprends bien si MTOM n'est pas activé côté serveur et côté client, le fichier entier sera conservé en mémoire (et non streamé). Donc, mes questions sont

  • Pourquoi avons-nous cette erreur?
  • Si je n'ajoute pas MTOMFeature, le fichier sera-t-il toujours transmis par MTOM?

Je serais très reconnaissant pour toute aide/conseils!

Répondre

1

Après quelques recherches et essais, les réponses sont:

  • L'erreur est parce que Grails ajoute son propre filtrage, y compris les services. Ainsi, en excluant les services d'être filtrés comme ceci static excludes = ["/services/*"] dans UrlMappings.groovy, cela fonctionne.
  • Non. Sans le MTOMFeature, le fichier sera traité comme n'importe quelle autre donnée de la requête. Cela signifie être stocké dans la mémoire, causant ainsi des problèmes pour les gros fichiers.