Bonjour à tous,

j'essaie en vain de configurer la webapp GraniteDS qui sert entre autre à sérialiser/désérialiser avec le protocole AMF les appels entre Flex (Flash) et Java.

Après la mise en place et de la webapp j'obtiens cette erreur :

9 août 2011 09:56:18 org.granite.logging.JdkLogger error
GRAVE: AMF message error
javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.granite.messaging.webapp.AMFMessageFilter.doFilter(AMFMessageFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoSuchMethodError: flex.messaging.messages.CommandMessage.isSecurityOperation()Z
at org.granite.messaging.amf.process.AMF3MessageProcessor.processCommandMessage(AMF3MessageProcessor.java:84)
at org.granite.messaging.amf.process.AMF3MessageProcessor.process(AMF3MessageProcessor.java:61)
at org.granite.messaging.amf.process.AMF0MessageProcessor.process(AMF0MessageProcessor.java:78)
at org.granite.messaging.webapp.AMFMessageServlet.doPost(AMFMessageServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
... 14 more
Mon but initial est de déployer cette webapp sous Glassfish. J'ai tenté un déploiement sous tomcat7 afin de "simplifier" l'environnement mais idem...

Ensuite sur un autre forum, j'ai vu cette réponse du créateur de la webapp pour un problème similaire au mien :

With Tomcat 7, you should use the servlet 3.0
(org.granite.gravity.async.GravityAsyncServlet) version instead of the
deprecated Tomcat specific servlet.

Change your web.xml accordingly.
j'ai testé avec tomcat6 pour ne pas utiliser les servlet 3.0 mais idem encore, j'ai l'erreur...

Ayant des connaissances limitées en Java, je patauge pas mal

Je sais pas si ca peut aider mais voici mon web.xml :

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
<?xml version="1.0" encoding="UTF-8"?>
 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
	<display-name>test Pojo</display-name>
	<description>test Pojo Application</description>
 
	<!-- Granite config context listener -->
	<listener>
		<listener-class>org.granite.config.GraniteConfigListener</listener-class>
	</listener>
 
	<filter>
		<filter-name>AMFMessageFilter</filter-name>
		<filter-class>org.granite.messaging.webapp.AMFMessageFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>AMFMessageFilter</filter-name>
		<url-pattern>/graniteamf/*</url-pattern>
	</filter-mapping>
 
	<servlet>
		<servlet-name>AMFMessageServlet</servlet-name>
		<servlet-class>org.granite.messaging.webapp.AMFMessageServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AMFMessageServlet</servlet-name>
		<url-pattern>/graniteamf/*</url-pattern>
	</servlet-mapping>
 
	<servlet>
		<servlet-name>GravityServlet</servlet-name>
		<servlet-class>org.granite.gravity.servlet3.GravityAsyncServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>GravityServlet</servlet-name>
		<url-pattern>/gravityamf/*</url-pattern>
	</servlet-mapping>
 
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
 
</web-app>

Le mapping entre les services Flex et Java est défini dans un fichier services-config.xml défini de la sorte :

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
 
    <services>
        <service
            id="granite-service"
            class="flex.messaging.services.RemotingService"
            messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="pojo">
                <channels>
                    <channel ref="my-graniteamf"/>
                </channels>
                <properties>
                    <scope>session</scope>
                    <source>com.pojos.PojoService</source>
                </properties>
            </destination>
        </service>
    </services>
 
    <channels>
        <channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">
            <endpoint
                uri="http://{server.name}:8080/{context.root}/graniteamf/amf"
                class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
 
</services-config>

Voilà, si quelqu'un a la moindre idée, je suis preneur

Un grand merci