0

当我尝试在基于 Spring MVC 的应用程序上使用 PayPal REST API 更新计费计划的状态时,我遇到了 ProtocolException。我的堆栈跟踪如下:

原因:java.net.ProtocolException:无效的 HTTP 方法:在 sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(HttpsURLConnectionImpl.java:374) 的 java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:428) 的 PATCH在 com.paypal.core.DefaultHttpConnection.createAndconfigureHttpConnection(DefaultHttpConnection.java:83) 在 com.paypal.core.rest.PayPalResource.execute(PayPalResource.java:364)

我该如何解决这个问题?

编辑:

这是我的控制器代码:

Plan createdPlan = plan.create(accessToken);  //Create a Billing Plan
createdPlan.setState("ACTIVE");  //Change state of created plan to 'ACTIVE'
createdPlan.update(accessToken);  //Call update method of com.paypal.api.payments.Plan class

计划.java

PayPal REST API 仅允许 PATCH 请求更新计费计划,如此处所述

4

1 回答 1

1

这里的答案将取决于您使用的是 Classic SDK 还是 REST SDK。

无论哪种情况,如果您在此处查看Paypal Core SDK 的来源,似乎已经报告并修复了此问题。特别是在com.paypal.core.DefaultHttpConnection (Paypal SDK 中设置 PATCH HTTP 方法的类)的代码中,您现在将看到以下注释:

* Workaround for a bug in {@code HttpURLConnection.setRequestMethod(String)}
 * The implementation of Sun/Oracle is throwing a {@code ProtocolException}
 * when the method is other than the HTTP/1.1 default methods. So to use {@code PATCH}
 * and others, we must apply this workaround.
 *
 * See issue http://java.net/jira/browse/JERSEY-639
 */

所以我希望最新版本能够解决这个问题。

因此,如果您使用的是 Classic SDK,只需使用 1.6.4 版本,因为它是最新版本并且包含修复程序(如此处所示

对于 SDK 的 REST API 版本,最新版本似乎是 0.11.2,它依赖于 CORE SDK 的“最新”版本,我再次假设它可以解决您的问题。

于 2014-11-09T11:09:05.873 回答