我正在使用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
的路径?
由于
更新
更新
答案 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";