cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de.INVALID>
Subject Re: MediaType matching question
Date Fri, 09 Dec 2016 17:10:31 GMT
actually it's the other way around. a Provider with */json will be used for everything, even
application/octet-stream.

The subtype only gets evaluated if the type is not a wildcard.

LieGrue,
strub





> On Friday, 9 December 2016, 17:36, Romain Manni-Bucau <rmannibucau@gmail.com> wrote:
> > think idea is  || other.subtype.equals(MEDIA_TYPE_WILDCARD) missed
> parenthesis leading to x/* matching anything
> 
> 
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github 
> <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
> 
> 
> 2016-12-09 17:32 GMT+01:00 Sergey Beryozkin <sberyozkin@gmail.com>:
> 
>>  Actually I'm not sure I understand, you mention 
> application/octet-stream,
>>  @Consumes below won't be matched, is application/json issue relevant ?
>> 
>>  application/json is expected to match application/json+x but not the other
>>  way around.
>> 
>>  Cheers, Sergey
>> 
>>  On 09/12/16 16:23, Sergey Beryozkin wrote:
>> 
>>>  Hi Mark, welcome,
>>> 
>>>  Do you expect a "*/*+json" match the application/octet-stream 
> ?
>>>  And how is the method parameter accepting a multipart payload is typed,
>>>  as InputStream ?
>>> 
>>>  As a side note with WebClient you can use a more dedicated Attachment
>>>  code but on the server side, if you need to stay 100% compliant, then
>>>  yes, you;d need to read from InputStream and parse the payload manually
>>>  - CXF MultipartProvider will not touch it unless it is annotated with a
>>>  CXF specific annotation
>>> 
>>>  Cheers, Sergey
>>> 
>>>  On 09/12/16 16:17, Mark Struberg wrote:
>>> 
>>>>  While debugging through this didn't get used as far as I 
> remember.
>>>> 
>>>>  Maybe MultipartProvider uses an alternative path to detect the 
> handlers?
>>>> 
>>>>  LieGrue,
>>>>  strub
>>>> 
>>>> 
>>>> 
>>>> 
>>>>  On Friday, 9 December 2016, 17:15, Romain Manni-Bucau
>>>>>  <rmannibucau@gmail.com> wrote:
>>>>> 
>>>>>>  Hey Mark,
>>>>>> 
>>>>> 
>>>>>  have a look
>>>>>  to
>>>>>  org.apache.cxf.jaxrs.provider.ProviderFactory.MessageBodyWri
>>>>>  terComparator
>>>>> 
>>>>>  (and the reader companion) maybe. Got aligned in cxf 
> "jaxrs 2" for
>>>>>  spec
>>>>>  alignment
>>>>> 
>>>>> 
>>>>>  Romain Manni-Bucau
>>>>>  @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>>>>  <https://blog-rmannibucau.rhcloud.com> | Old Blog
>>>>>  <http://rmannibucau.wordpress.com> | Github
>>>>>  <https://github.com/rmannibucau> |
>>>>>  LinkedIn <https://www.linkedin.com/in/rmannibucau> | 
> JavaEE Factory
>>>>>  <https://javaeefactory-rmannibucau.rhcloud.com>
>>>>> 
>>>>> 
>>>>>  2016-12-09 17:10 GMT+01:00 Mark Struberg 
> <struberg@yahoo.de.invalid>:
>>>>> 
>>>>>   good evening!
>>>>>> 
>>>>>>   My first post to CXF, so I excuse if I ask something 
> obvious ;)
>>>>>> 
>>>>>>   We have the following code over in Apache OpenWebBeans / 
> Meecrowave:
>>>>>> 
>>>>>>   @Produces({
>>>>>>           "application/json", "*/json",
>>>>>>           "*/*+json", "*/x-json",
>>>>>>           "*/javascript", 
> "*/x-javascript"
>>>>>>   })
>>>>>>   @Consumes({
>>>>>>           "application/json", "*/json",
>>>>>>           "*/*+json", "*/x-json",
>>>>>>           "*/javascript", 
> "*/x-javascript"
>>>>>>   })
>>>>>>   public static class ConfiguredJsonbJaxrsProvider<T> 
> extends
>>>>>>   JsonbJaxrsProvider<T> {
>>>>>> 
>>>>>>   I tried to use the CXF WebClient to send a multipart form 
> with a file
>>>>>>   attachment. MediaType is application/octet-stream.
>>>>>>   Sadly I always triggered our Johnzon JSONB provider
>>>>>>  (johnzon.apache.org).
>>>>>> 
>>>>>>   The reason is that */json seems to match ANY other 
> MediaType,
>>>>>>  regardless
>>>>>>   of the subtype. Is this intended?
>>>>>>   The code I found during debugging is the following in
>>>>>>  geronimo-jaxrs_2.0
>>>>>>   MediaType:
>>>>>> 
>>>>>>   public boolean isCompatible(MediaType other) {
>>>>>>       return other != null && 
> (type.equals(MEDIA_TYPE_WILDCARD) ||
>>>>>>   other.type.equals(MEDIA_TYPE_WILDCARD) ||
>>>>>>           (type.equalsIgnoreCase(other.type) &&
>>>>>> 
>>>>>  (subtype.equals(MEDIA_TYPE_WILDCARD)
>>>>> 
>>>>>>   || other.subtype.equals(MEDIA_TYPE_WILDCARD))) ||
>>>>>>           (type.equalsIgnoreCase(other.type) &&
>>>>>>   this.subtype.equalsIgnoreCase(other.subtype)));
>>>>>>   }
>>>>>> 
>>>>>> 
>>>>>>   I'm geronimo PMC myself so I can even fix it. But 
> would need some
>>>>>> 
>>>>>  feedback
>>>>> 
>>>>>>   how it should behave.
>>>>>>   https://svn.apache.org/repos/asf/geronimo/specs/trunk/
>>>>>>   geronimo-jaxrs_2.0_spec/
>>>>>> 
>>>>>>   I did a quick look at the RI and now I'm even more 
> confused:
>>>>>> 
>>>>>>       public boolean isCompatible(MediaType other) {
>>>>>>           return other != null && // return false if 
> other is null,
>>>>>> 
>>>>>  else
>>>>> 
>>>>>>                   (type.equals(MEDIA_TYPE_WILDCARD) ||
>>>>>>   other.type.equals(MEDIA_TYPE_WILDCARD) || // both are 
> wildcard
>>>>>>  types, or
>>>>>>                           (type.equalsIgnoreCase(other.type) 
> &&
>>>>>>   (subtype.equals(MEDIA_TYPE_WILDCARD)
>>>>>>                                   ||
>>>>>> 
>>>>>  other.subtype.equals(MEDIA_TYPE_WILDCARD)))
>>>>> 
>>>>>>   || // same types, wildcard sub-types, or
>>>>>>                           (type.equalsIgnoreCase(other.type) 
> &&
>>>>>>   this.subtype.equalsIgnoreCase(other.subtype))); // same 
> types &
>>>>>> 
>>>>>  sub-types
>>>>> 
>>>>>>       }
>>>>>> 
>>>>>>   It says "both are wildcard types" but the code 
> is actually ONE of
>>>>>> 
>>>>>  them is
>>>>> 
>>>>>>   a wildcard type, isn't?
>>>>>>    (type.equals(MEDIA_TYPE_WILDCARD) ||
>>>>>> 
>>>>>  other.type.equals(MEDIA_TYPE_WILDCARD)
>>>>> 
>>>>>>   || // both are wildcard types, or
>>>>>> 
>>>>>> 
>>>>>>   Any hints are highly welcome, my head is already 
> hurting...
>>>>>> 
>>>>>>   What are the actual rules for matching MediaTypes? What 
> does the spec
>>>>>>   define?
>>>>>> 
>>>>>>   txs and LieGrue,
>>>>>>   strub
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>>> 
>> 
>>  --
>>  Sergey Beryozkin
>> 
>>  Talend Community Coders
>>  http://coders.talend.com/
>> 
> 

Mime
View raw message