Push-уведомление FCM: java.io.IOException: существующее соединение было принудительно закрыто удаленным хостом - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь реализовать отправку Push-уведомлений на устройстве Android с помощью FCM в Java, но получаю эту ошибку:

 java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.readv0(Native Method)
    at sun.nio.ch.SocketDispatcher.readv(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.read(IOUtil.java:278)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:440)
    at weblogic.socket.NIOSocketMuxer$NIOInputStream.readInternal(NIOSocketMuxer.java:803)
    at weblogic.socket.NIOSocketMuxer$NIOInputStream.read(NIOSocketMuxer.java:745)
    at weblogic.socket.NIOSocketMuxer$NIOInputStream.read(NIOSocketMuxer.java:728)
    at weblogic.socket.JSSEFilterImpl.readFromNetwork(JSSEFilterImpl.java:462)
    at weblogic.socket.JSSEFilterImpl.handleUnwrapResults(JSSEFilterImpl.java:634)
    at weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:515)
    at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:96)
    at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:75)
    at weblogic.socket.JSSESocket.startHandshake(JSSESocket.java:219)
    at weblogic.net.http.HttpsClient.New(HttpsClient.java:563)
    at weblogic.net.http.HttpsURLConnection.getHttpClient(HttpsURLConnection.java:332)
    at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:711)
    at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
    at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:1444)
    at utils.FCM.send_FCM_Notification(FCM.java:71)
    at Services.CreateMeeting.call(CreateMeeting.java:283)
    at Services.CreateMeeting.doPost(CreateMeeting.java:89)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:751)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at filter.Loginfilter.doFilter(Loginfilter.java:120)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

Мой класс FCM:

public class FCM 
{
    final static private String FCM_URL = "https://fcm.googleapis.com/fcm/send";

    public static void main(String[] args)
    {
        String tokenId= "fh11LQ1st3M:APA91bEz1VjEKNiM9YZBzTF8SbW1esE8ykYvfSpBMDfhCNgcvdDHTbe_iTLd_golWi0PGH0vs630bXlWKT9Tw3oZTp6YOooYXfx3GkFCK7k21sNcV4emaO6sImmCBuSkMk1EyjVE2Ndi";
        send_FCM_Notification(tokenId, "New Notificationcreated","Create Meeting");
    }

    public static void send_FCM_Notification(String tokenId, String message, String type)
    {
        try
        {
            URL url = new URL(FCM_URL);

            HttpURLConnection conn;

            conn = (HttpURLConnection) url.openConnection();
            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization","key=AAAAVX9r9wY:APA91bEi2GgGrbF_XxJ9fAsdGF07kE8wSHU7KOYPOVMvEXaFaFJDisO18r086i-Ju7Gllv0abOz7SsAgL3RdR-Vq8CMZdR7HsBnDjVrmyZ-u2aeeLdnf-ZFxSB7V_NzkMeMK4d7S87ml");

            conn.setRequestProperty("Content-Type","application/json");

            JSONObject typejson = new JSONObject();
            typejson.put("title","Demo");
            typejson.put("body", message);
            typejson.put("message", message);
            typejson.put("type", type);
            typejson.put("timestamp", new Date());
            typejson.put("priority", 1);

            JSONObject json = new JSONObject();
            json.put("to",tokenId.trim());
            json.put("data", typejson);
            System.out.println(json);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(json.toString());
            wr.flush();

            int status = 0;

            if( null != conn )
            {
                status = conn.getResponseCode();
            }

            if( status != 0)
            {
                if( status == 200 )
                {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                }
            }
        }

        catch (Exception exception) 
        {
            exception.printStackTrace();
        }
    }

}

Когда я вызываю этот метод (send_FCM_Notification) из основного метода, он работает, но когда он получает вызов от сервлета, использующего сервер Weblogic, он выдает эту ошибку

Я не могу найти точную причинуЭто исключение, пожалуйста, попробуйте помочь мне

1 Ответ

0 голосов
/ 15 апреля 2019

Я включил SSL-порт в weblogic и попытался с помощью https url, и это решило мою проблему.

...