PayPal - Spring - Недействительный метод HTTP: PATCH

Когда я пытаюсь обновить состояние тарифного плана с помощью API-интерфейса PayPal REST в приложении на основе Spring MVC, я обнаруживаю исключение ProtocolException. Моя трассировка стека выглядит следующим образом:

Вызвано: java.net.ProtocolException: недопустимый метод HTTP: PATCH на java.net.HttpURLConnection.setRequestMethod (HttpURLConnection.java:428) на sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestMethod (HttpsURLConnectionImpl.setRequestMethod (HttpsURLConnection) в 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

Plan.java

PayPal REST API разрешает только запросы PATCH для обновления тарифного плана, как описано в здесь


person Gopi Kalyan    schedule 08.11.2014    source источник
comment
Методы HTTP: GET, POST, PUT, TRACE, DELETE. PATCHэто не метод HTTP.   -  person Buhake Sindi    schedule 08.11.2014
comment
Можете ли вы разместить здесь свой код, который вы используете для связи с Paypal?   -  person dReAmEr    schedule 08.11.2014
comment
@BuhakeSindi RFC 5789 сказал бы иначе: tools.ietf.org/html/rfc5789   -  person Rob Blake    schedule 09.11.2014


Ответы (1)


Ответ здесь будет зависеть от того, используете ли вы Classic SDK или REST SDK.

В любом случае, если вы посмотрите на источник Paypal Core SDK здесь, кажется, что об этой проблеме уже сообщалось и она исправлена. В частности, в коде com.paypal.core.DefaultHttpConnection (который является классом в SDK Paypal, устанавливающим HTTP-метод PATCH) вы увидите следующий комментарий:

* 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, поскольку она является последней и содержит исправление (как показано на здесь).

Для версии SDK REST API последняя версия выглядит как 0.11.2, которая зависит от «последней» версии CORE SDK, которая, как я полагаю, решит вашу проблему.

person Rob Blake    schedule 09.11.2014
comment
Я использовал версию SDK для REST API, и обновление версии, похоже, решило проблему. Спасибо. - person Gopi Kalyan; 11.11.2014
comment
Я получаю именно эту проблему, используя REST API версии 1.13. Кто-нибудь еще? - person Jason Washo; 20.12.2016