找不到sdk_config.properties

时间:2013-06-12 19:32:08

标签: java sdk paypal payment

我正在尝试在我的网站中加入paypal处理。我正在使用java sdk生成付款,但每当我尝试进行身份验证时,都会收到以下错误消息:

  

java.io.IOException:资源'sdk_config.properties'不可能   结果

我正在执行的代码如下:

String clientID = properties.getProperty("clientID");
String clientSecret = properties.getProperty("clientSecret");
return new OAuthTokenCredential(clientID, clientSecret).getAccessToken();

我知道文档说你需要maven但是我没有在我的项目中使用maven ......我只是使用maven来构建sdk然后在我的项目中包含必要的jar和文件。我有一个sdk_config.properties文件位于我的WEB-INF文件夹下,我在获取clientID和clientSecret之前将其加载到属性对象中,但每当我尝试创建OAuthTokenCredential时,代码都会对我产生影响。我找不到OAuthTokenCredential对象的源代码来找到愚蠢的东西,所以我有点卡在这里......当然!提前你的帮助:)

3 个答案:

答案 0 :(得分:6)

好吧,经过几杯啤酒和很多头疼,我能够解决自己的问题。我找到了OAuthTokenCredential对象调用的source code for the ResourceLoader object of the paypal core来加载sdk_config.properties文件。我将ResourceLoader代码复制并粘贴到我的代码中并运行它以查看它在做什么。所以基本上ResourceLoader对象在类路径上查找sdk_config.properties文件 - 并且我松散地使用该术语,因为它实际上没有检查项目的类路径,这就是为什么它找不到文件 - 但它也会查找.properties文件在项目的基础包中。所以我通过将sdk_config.properties文件移动到项目的基础包来解决了这个问题(这意味着我将它直接放在src文件夹下)。现在它有效!!!

愚蠢的Paypal代码...... Y对付款处理至关重要的事情应以如此宽松的方式进行硬编码。如果有一个paypal开发人员在那里听,我建议更新代码以允许.properties文件的位置传递到OAuthTokenCredential构造函数,然后将该位置传递给getResourceAsStream()方法。把它放在下一个版本中,因为我确定它会导致很多人头痛,很多人可能只是放弃并使用其他东西。另外,修复searchClasspath()方法......它不会搜索项目的类路径。

答案 1 :(得分:3)

如果您正确捆绑了WAR,那么您应该说<> .getResourceAsStream(“/ sdk_config.properties”);它应该适合你。

请下载GitHub中提供的样本并查看。所有PayPal样品都可以开箱即用,因此您也可以将样品的代码库与您的代码库进行比较。

https://github.com/paypal/rest-api-sdk-java/tree/master/rest-api-sample

如果您仍有问题,请随时更新此主题。

答案 2 :(得分:2)

在0.7.1版中,您可以使用第二个构造函数,它具有 configurationMap 作为参数。所以你不需要任何 sdk_config.properties

public OAuthTokenCredential(String clientID, String clientSecret,Map<String, String> configurationMap)

如果要在没有sdk_config.properties的情况下使用 APIContext ,则必须调用setter来设置配置映射。映射包含与 sdk_config.properties 中相同的键:值对。(键区分大小写)

示例:

Map<String, String> configurationMap = getConfigurationMap();
String accessToken = new OAuthTokenCredential(clientId, clientSecret, configurationMap).getAccessToken();
APIContext apiContext = new APIContext(accessToken);
apiContext.setConfigurationMap(configurationMap);