cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: MediaType matching question
Date Fri, 09 Dec 2016 16:36:20 GMT
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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message