cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: MediaType matching question
Date Fri, 09 Dec 2016 16:23:49 GMT
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.MessageBodyWriterComparator
>> (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
>>>
>>>
>>>
>>>
>>


-- 

Mime
View raw message