Flex BlazeDS – Received fault: RPC Fault: faultCode="Server.ResourceUnavailable" faultDetail="Type 'remoting.EchoService' not found."
Ce article explique comment résoudre un problème que vous pouvez avoir avec BlazeDS. Voici l'erreur exacte qui correspond à la propriété "fault" du FaultEvent:
[RPC Fault faultString="Cannot create class of type 'remoting.EchoService'." faultCode="Server.ResourceUnavailable" faultDetail="Type 'remoting.EchoService' not found."]
En remplaçant bien sur "remoting.EchoService" par la classe qui pose problème. Comme l'explique le message d'erreur, le serveur applicatif n'arrive pas à trouver la classe distante que vous tentez d'appeler. Les classes Java que vous créez se trouvent typiquement dans le dossier WEB-INF/src/ de votre Web application. Une fois compilées, les fichiers .class correspondant à ces classes sont copiés dans le dossier /WEB-INF/classes/.
Vous ne verrez pas le dossier /WEB-INF/classes/ dans la vue Package Explorer d'Eclipse. Utiliser un explorateur de fichiers classique.
Pour résoudre ce problème, vérifiez que le fichier .class correspondant à l'objet Java que vous souhaitez appeler se trouve bien dans le répertoire WEB-INF/classes/. S'il ne s'y trouve pas, compilez à nouveau votre projet Java (Project > Clean).
Si cela ne résous toujours pas votre problème, vérifiez que vous ne vous êtes pas trompé dans la casse du nom de classe ainsi que dans les noms de package.
Flex BlazeDS – RPC Fault: faultCode="InvokeFailed" faultDetail="Couldn't establish a connection to 'echoServiceDestination'"
Ce article explique comment résoudre un problème que vous pouvez avoir avec BlazeDS. Voici l'erreur exacte qui correspond à la propriété "fault" du FaultEvent:
Received fault: [RPC Fault faultString="[MessagingError message='Destination 'echoServiceDestination' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']" faultCode="InvokeFailed" faultDetail="Couldn't establish a connection to 'echoServiceDestination'"]
Bien sûr, dans votre cas, le nom du service ne sera pas "echoServiceDestination". Cette erreur se produit quand vous essayer d'appeler une méthode d'un RemoteObject et vient en fait d'un problème de configuration. Voici un bout de code contenant le RemoteObject qui pose problème:
<mx:RemoteObject id="remoteObject" destination="echoServiceDestination" result="resultHandler(event);" fault="faultHandler(event);"/>
Comme le dit le détail de l'erreur, la destination voulue ne peut pas être accédée. Comme votre serveur applicatif ne la trouve pas, il va chercher un "fallback", c'est-à-dire une destination par défaut sur votre serveur.
Dans la plupart des cas, cela signifie que votre application n'as pas réussi à lire le fichier de configuration de services services-config.xml. Il n'arrive donc pas à trouver la route vers la destination que vous lui donnez.
Vérifiez vos paramètres de compilation
Même s'il y a d'autres manières de le faire, vous pouvez renseigner le chemin vers le fichier de configuration services-config.xml comme paramètre de compilation par l'option -services comme ceci:
-services "C:\blazeds\tomcat\webapps\samples\WEB-INF\flex\services-config.xml" -locale en_US
Définir le fichier de configuration des services dans l'application cliente
Au moment de la création du projet…
Si vous avez crée votre projet de 0, vous avez sûrement définit au moment de la création, le type de serveur applicatif (J2EE, Colfusion, PHP, …) ainsi que les différentes informations associées (Root Folder, Root Url et Context Root). Vérifiez que vous avez bien configuré ces options pour qu'elle pointe vers la bonne application BlazeDS. Pour voir un exemple de création de projet BlazeDS de 0, consultez ce tutorial:
Flex BlazeDS – Tutorial Application Java Remoting avec BlazeDS Turnkey
Flex BlazeDS – Tutorial Application Java Remoting avec BlazeDS Turnkey
Ce tutorial Adobe Flex avec BlazeDS va vous expliquer comment monter votre première application Java en liaison avec une application Flex. On va ici utiliser le service RPC (Remote Procedure Call) de BlazeDS pour la communication. Afin de faciliter l'explication, on va utiliser la version "Turnkey" de BlazeDS qui est directement livrée avec un serveur d'application Tomcat. Si vous n'avez pas encore installé BlazeDS Turnkey, suivez ces instructions:
Flex BlazeDS – Configurer son environnement BlazeDS avec Turnkey
Création du projet Java
Vous allez avoir besoin d'un projet Java pour la partie serveur de l'application. Tout d'abord, ouvrez Eclipse et créez un nouveau projet Java:
- Dans le menu d'Eclipse, choisissez File > New > Project
- Dans l'arbre, choisissez Java Project comme type de projet puis Next
- Sur la page "Create a Java Project":
- Entrez "blazeds-server" comme nom de projet
- Sélectionnez "Create project from existing source", et entrez le chemin vers la webapp "sample" comme par exemple "C:\blazeds\tomcat\webapps\samples\WEB-INF"
- Next
- Sur la page "Java Settings", assurez-vous que le Default output folder soit à "blazeds-server/WEB-INF/classes" puis Finish
Cette configuration de projet vous permet de conserver le code source de vos classes Java dans le dossier WEB-INF/src. Ces classes seront automatiquement compilées dans le dossier WEB-INF/classes.
Création des classes Java
Le service de Remoting (RPC) est un des services inclus dans BlazeDS. Ce service permet au client d'accéder aux méthodes des Plain Old Java Object (POJO = "bon vieux objets Java") sur le serveur.
Dans cet exemple, on va déployer une classe, EchoService.java, sur le serveur qui va renvoyer la String passée par le client. Le code suivant montre la définition de EchoService.java:
package remoting;
public class EchoService
{
public String echo(String text) {
return "Server says: I received '" + text + "' from you";
}
}
Pour créer cette classe, faîtes clic droit sur le projet Java que vous venez de créer puis New > Class. Comme nom de package, entrez "remoting" et comme nom de classe, EchoService:

Vous le voyez, cette classe est très simple. La méthode echo() prend un argument de type String et le retourne avec un texte supplémentaire. Une fois que la classe EchoService.java est compilée, elle sera placée dans WEB-INF/classes/remoting. Notez que les classes Java n'ont pas à importer ou à référencer des ressources BlazeDS.
Création de la destination de remoting (remoting-config.xml)
Une "Remoting Destination" expose une classe Java pour que votre application Adobe Flex puisse l'invoquer de manière distante. La propriété "id" de la destination est le nom logique que votre application Flex utilise pour faire référence à la classe distante, ce qui élimine le besoin d'avoir une référence vers un nom complet de classe Java (fully qualified) codé en dur. Ce nom logique est lié au nom de la classe Java dans le configuration de la destination qui se trouve dans remoting-config.xml.
Pour créer cette Remoting Destination:
- Dans le projet blazeds-server, ouvrez le fichier remoting-config.xml situé dans le dossier "WEB-INF/flex". Si vous l'ouvrez dans Eclipse, passez en vue "Source" pour avoir le code directement.
- Plusieurs destinations, fournies avec Turnkey sont déjà présentes. Rajoutez la votre:
<destination id="echoServiceDestination" channels="my-amf">
<properties>
<source>remoting.EchoService</source>
</properties>
</destination>
- Enregistrez le fichier
L'élément XML "source" référence la classe Java et l'attribut "channels" fait référence au canal qui va être utilisé, ici appelé "my-amf".





