在服务器上运行时java.io.FileNotFoundException

时间:2017-06-28 14:24:10

标签: java spring tomcat

我正在使用Java 8和Spring 4.3.1.RELEASE。

我有以下代码,当我将main作为java应用程序运行时,它可以正常工作。但是,当我将它部署到Tomcat服务器并且线程调用它时,我收到以下错误:

错误

  

java.io.FileNotFoundException:src / main / resources / certificates / apns-prod-cert.p12(没有这样的文件或目录)

private static String PATH_TO_P12_CERT = "src/main/resources/certificates/apns-prod-cert.p12";

private String sendIOSPushNotification(String device_token, String topics, String title, String message)
        throws Exception {
    ApnsServiceBuilder serviceBuilder = APNS.newService();
        serviceBuilder.withCert(PATH_TO_P12_CERT, CERT_PASSWORD)
                .withProductionDestination();
    ApnsService service = serviceBuilder.build();
    String payload = APNS.newPayload()
            .alertBody(message)
            .alertTitle(title)
            .sound("default")
            .customField("custom", "custom value").build();
    service.push(device_token, payload);

    return "iOS Push Notification: " + title + " " + message;
}

问题

如何定义apns-prod-cert.p12的路径?

由于

更新

enter image description here

更新

enter image description here

3 个答案:

答案 0 :(得分:2)

如果在IDE之外运行代码,则没有/src/main/resources目录。使用serviceBuilder.withCert(this.getClass().getResourceAsStream("/certificates/apns-prod‌​-cert.p12"),CERT_PASSWORD)

答案 1 :(得分:0)

我有一个解决方案。我不认为它是最优雅的,但我会暂时使用它直到更好的东西出现。

我将资源apns-prod-cert.p12移动到与使用它的类(NotificationServiceImpl)相同的目录中。然后我做以下事情:

String certPath = NotificationServiceImpl.class.getResource("apns-prod-cert.p12").getPath();

这不是最好的,因为这意味着我必须在apns-prod-cert.p12下将resources打包到我通常需要的地方。

答案 2 :(得分:-2)

您应该在生产环境中考虑没有src文件夹。相反,资源文件夹中的所有内容都放在类路径中。试试:

private static String PATH_TO_P12_CERT = "classpath:certificates/apns-prod-cert.p12";