当我尝试在基于Spring MVC的应用程序上使用PayPal REST API更新计费计划的状态时,遇到ProtocolException。我的堆栈跟踪如下:
引起:java.net.ProtocolException:无效的HTTP方法:PATCH 在java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:428) at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod(HttpsURLConnectionImpl.java:374) 在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
PayPal REST API仅允许PATCH请求更新结算计划,如文档here
答案 0 :(得分:1)
这里的答案取决于您使用的是Classic SDK还是REST SDK。
在任何一种情况下,如果您查看Paypal核心SDK here的来源,似乎已经报告并修复了此问题。特别是在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
*/
所以我希望最新版本能解决这个问题。
因此,如果您使用的是经典SDK,只需使用版本1.6.4,因为它是最新版本并包含修复程序(如here所示)。
对于SDK的REST API版本,最新版本似乎是0.11.2,它依赖于CORE SDK的“最新”版本,我再次认为这将解决您的问题。