> On Aug 20, 2015, at 8:55 AM, Sergey Beryozkin <[email protected]> wrote:
> Yes, indeed, thanks,
> 
> and as to why HTTPUrlConnection keeps blocking HTTP verbs even with the 
> latest versions - you'd need to ask at Java forums. People use new verbs like 
> PATCH or WebDav verbs so it is strange that such verbs are still not 
> supported in JDK - at least they could've introduced a property which, if 
> enabled, would let HTTPUrlConnection accept any HTTP verb.


I just added a property to our HttpURLConnection based conduit which will use a 
bit of reflection to set the method if the call to setRequestMethod throws the 
exception.   I’ve defaulted this to false to keep the current behavior as it is 
a hack and may not work in certain scenarios (security manager may prevent it, 
other JDK may have different field name, etc…).

You can set a contextual property of “httpurlconnection.method.hack” to true 
(or as a system property read at startup) and it will trigger using the 
reflection.  That should allow things like PATCH to work without that async 
client.

Dan



> 
> @Patch annotation has been added to save some users from typing their own 
> JAX-RS HttpMethod extensions - which is what JAX-RS recommends, if JAX-RS API 
> itself has no the annotation for a given HTTP method then can support such a 
> method with a JAX-RS HttpMethod-based annotation
> 
> Cheers, Sergey
> On 20/08/15 13:34, Jose María Zaragoza wrote:
>> 2015-08-20 11:46 GMT+02:00 PatrikStas <[email protected]>:
>>> Hi everyone !
>>> 
>>> I've been trying to get the @PATCH method get working for a while now but
>>> with not further success.
>>> I've noticed it haven't been present in CXF 3.0.2, but been added to CXF
>>> 3.1.2 into the package package org.apache.cxf.jaxrs.ext; ( it's missing in
>>> documnetation tho )
>>> 
>>> When I try to use PATCH method to call my service, I get
>>> *
>>> Caused by: java.net.ProtocolException: Invalid HTTP method: PATCH
>>>         at 
>>> java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:428)*
>>> 
>>> The setRequestMethod is looking for methodn name in statically defined list
>>> of methods, defined as
>>> *
>>>     private static final String[] methods = {
>>>         "GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"
>>>     };*
>>> 
>>> And since it doesn't find PATCH, it throws
>>> *
>>>         throw new ProtocolException("Invalid HTTP method: " + method);*
>>> 
>>> Browsing forums and mailing lists, I found these posts here :
>>> 
>>> http://comments.gmane.org/gmane.comp.apache.cxf.user/25919
>>> 
>>> Saying I can use async transport and then the PATCH should work
>>> 
>>> *         String address = "http://localhost:"; + PORT +
>>> "/bookstore/retrieve";
>>>          WebClient wc = WebClient.create(address);
>>> 
>>> WebClient.getConfig(wc).getRequestContext().put("use.async.http.conduit",
>>> true);
>>>          Book book = wc.invoke("RETRIEVE", null, Book.class);*
>> 
>>> 
>>> However, even if I try to call my service like this, it's still failing.
>> 
>> I think that you need to include cxf-rt-transports-http-hc
>> 
>> <dependency>
>> <groupId>org.apache.cxf</groupId>
>> <artifactId>cxf-rt-transports-http-hc</artifactId>
>> <version>${cxf.version}</version>
>> </dependency>
>> 
>> 
>>> Moreover even if this would work, I find it a bit hacky. Why is PATCH not
>>> supported, if it's been added to CXF ?
>>> 
>>> I have other services working properly, the only service which are throwing
>>> this exception are the ones annotated with @PATCH.
>>> 
>>> What is the problem ?
>>> 
>>> Thanks a lot in advance for any tips !
>>> Patrik
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> --
>>> View this message in context: 
>>> http://cxf.547215.n5.nabble.com/PATCH-Method-is-failing-tp5760309.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
> 
> 
> -- 
> Sergey Beryozkin
> 
> Talend Community Coders
> http://coders.talend.com/

-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to