Android上的wasync客户端无法接收来自Primefaces - Atmosphere服务器的推送通知

时间:2015-11-12 12:49:28

标签: android primefaces push atmosphere

软件堆栈:

  • Tomcat v7.0.62
  • Primefaces 5.0应用程序与大气(@PushEndpoint) - 大气 - 运行时v.2.1.3
  • 使用Atmosphere Wasync客户端v1.4.3的外部Android应用

我们有2个单独的申请。一方面,我们有一个PrimeFaces应用程序,除其他外,发送通知。另一方面,我们有一个独立的Android应用程序。我们正试图找出PF浏览器客户端使用wAsync发送/接收独立Android客户端消息的最佳方式。

似乎Android应用程序能够成功连接。但是,发送PF的通知没有任何效果,应用程序没有收到它,并且Android应用程序或服务器上都没有错误消息。

这是主要代码:

@PushEndpoint("/servicios")
public class ServiciosPushControlador implements ServiciosControladorListener {
    @Override
    @OnMessage(encoders = {JSONEncoder.class})
    public String servicioActualizado(Servicio servicio) {
        return "update";
    }
}

Atmosphere的web.xml配置

<!-- PUSH PrimeFaces-->
<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

这是Android代码:

public <ResultType> void notificationSuscriber(Function<ResultType> succesFunction, Function<IOException> errorFunction, final Class<ResultType> clazz) throws IOException {
        RequestBuilder request = client.newRequestBuilder()
                .method(org.atmosphere.wasync.Request.METHOD.GET)
                .uri("http://192.168.0.101:8080/calview/primepush/servicios")
                .encoder(new Encoder<ResultType, String>() {

                    @Override
                    public String encode(ResultType s) {
                        try {
                            return mapper.writeValueAsString(s);
                        } catch (IOException iOEx) {
                            throw new RuntimeException(iOEx);
                        }
                    }
                })
                .decoder(new Decoder<String, ResultType>() {

                    @Override
                    public ResultType decode(Event e, String s) {
                        if (s.length() == 0)
                            return null;
                        if (e.equals(Event.MESSAGE)) {
                            try {
                                return new ObjectMapper().readValue(s, clazz);
                            } catch (IOException iOEx) {
                                iOEx.printStackTrace();
                                return null;
                            }
                        } else
                            return null;
                    }
                })
                .transport(org.atmosphere.wasync.Request.TRANSPORT.WEBSOCKET);

        Socket socket = client.create();
        socket.on("message", succesFunction)
                .on(errorFunction)
                .open(request.build());
    }

0 个答案:

没有答案