2010-10-07 5 views
1

Je travaille sur une application web Java qui utilise Struts 2 avec le plugin REST. Par convention, toute URL se terminant par ".xml" sera envoyée via XStreamHandler. C'est bien - c'est ce que je veux dans la plupart des cas.Comment remplacer le gestionnaire XML dans le plugin Struts 2 REST

Mais dans un petit nombre de cas, je veux flux XML retour au navigateur. Je sais comment configurer une annotation @Result (type = "stream") et la renvoyer à InputStream. Je l'ai fait pour les images dans d'autres parties de l'application. Le problème avec le retour de XML en tant que flux est que le plugin REST voit que l'appelant demande du XML, donc il essaie de désérialiser la classe Action au lieu de simplement diffuser mon InputStream.

Comment puis-je dire au plugin REST, juste dans ces cas spéciaux, de ne pas envoyer de résultat XML via XStreamHandler?

Merci!

Répondre

1

Oh, cool, j'ai trouvé la réponse. Le secret est de renvoyer une instance d'une classe qui implémente com.opensymphony.xwork2.Result.

En supposant 'getFileName() retourne le nom du fichier XML que je veux diffuser:

@SkipValidation 
public com.opensymphony.xwork2.Result streamFile() throws FileNotFoundException { 
    return new StreamResult(new FileInputStream(new File(getFileName()))); 
}