You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by "Rupert Westenthaler (JIRA)" <ji...@apache.org> on 2013/12/16 07:36:09 UTC

[jira] [Comment Edited] (STANBOL-1237) Make Entityhub Serializer extendable

    [ https://issues.apache.org/jira/browse/STANBOL-1237?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13848859#comment-13848859 ] 

Rupert Westenthaler edited comment on STANBOL-1237 at 12/16/13 6:35 AM:
------------------------------------------------------------------------

ModelWriter interface
-----------------------

The ModelWriter Interface defines the following constants and methos

{code:title=ModelWriter.java|borderStyle=solid}
    /** The default charset is UTF-8 **/
    String DEFAULT_CHARSET = "UTF-8";

    /** The default MediaType is 'application/json; charset=UTF-8' **/
    MediaType DEFAULT_MEDIA_TYPE = 
        MediaType.APPLICATION_JSON_TYPE
        .withCharset(DEFAULT_CHARSET);

    /** The natively supported Represntation or null if none **/
    Class<? extends Representation> getNativeType();

    /** List of supported mediaTypes. Most preferred type first **/
    List<MediaType> supportedMediaTypes()

    /**
     * Getter for the best fitting {@link MediaType} for the parsed one. This
     * Method is intended to let the ModelWriter choose the best fitting type
     * in case the parsed {@link MediaType} uses a wildcard type or sub-type. 
     * @param mediaType a wildcard mediaType
     * @return the selected mediaType or <code>null<code> if none was found.
     */
    public MediaType getBestMediaType(MediaType mediaType);

    /** writes a Representation **/
    public void write(Representation rep, OutputStream out, MediaType medType) 
        throws WebApplicationException, IOException;

    /** writes an Entity **/
    public void write(Entity entity, OutputStream out, MediaType medType)
        throws WebApplicationException, IOException;

    /** writes a query result list. Needs to support String, Representation and Entity **/
    public void write(QueryResultList<?> result, OutputStream out, MediaType medType) 
        throws WebApplicationException, IOException;

{code}

This extension point will be defined by the Entityhub Jersey module and not by the Entityhub Servicesapi. This is because this interface has a dependency to JAX-RS.


was (Author: rwesten):
ModelWriter interface
-----------------------

The ModelWriter Interface defines the following constants and methos

{code:title=ModelWriter.java|borderStyle=solid}
    /** The default charset is UTF-8 **/
    String DEFAULT_CHARSET = "UTF-8";
    /** The default MediaType is 'application/json; charset=UTF-8' **/
    MediaType DEFAULT_MEDIA_TYPE = 
        MediaType.APPLICATION_JSON_TYPE
        .withCharset(DEFAULT_CHARSET);
    /** The natively supported Represntation or null if none **/
    Class<? extends Representation> getNativeType();
    /** List of supported mediaTypes. Most preferred type first **/
    List<MediaType> supportedMediaTypes()
    /**
     * Getter for the best fitting {@link MediaType} for the parsed one. This
     * Method is intended to let the ModelWriter choose the best fitting type
     * in case the parsed {@link MediaType} uses a wildcard type or sub-type. 
     * @param mediaType a wildcard mediaType
     * @return the selected mediaType or <code>null<code> if none was found.
     */
    public MediaType getBestMediaType(MediaType mediaType);
    /** writes a Representation **/
    public void write(Representation rep, OutputStream out, MediaType medType) 
        throws WebApplicationException, IOException;
    /** writes an Entity **/
    public void write(Entity entity, OutputStream out, MediaType medType)
        throws WebApplicationException, IOException;
    /** writes a query result list. Needs to support String, Representation and Entity **/
    public void write(QueryResultList<?> result, OutputStream out, MediaType medType) 
        throws WebApplicationException, IOException;

{code}

This extension point will be defined by the Entityhub Jersey module and not by the Entityhub Servicesapi. This is because this interface has a dependency to JAX-RS.

> Make Entityhub Serializer extendable
> ------------------------------------
>
>                 Key: STANBOL-1237
>                 URL: https://issues.apache.org/jira/browse/STANBOL-1237
>             Project: Stanbol
>          Issue Type: Improvement
>          Components: Entityhub
>            Reporter: Rupert Westenthaler
>            Assignee: Rupert Westenthaler
>
> The Serialization of the Entityhub models is implemented as JAX-RS MessageBodyWriter. Model classes to be serialized include Representation, Entity and QueryResultList. Where an Entity is constructed of two Representations (data and metadata) and QueryResultLists can include Strings (ids only), Representations or Entities.
> Currently there are two implementations of model serializer: (1) an Implementation for the Entityhub specific JSON format and (2) an implementation based on Clerezza that supports the various RDF formats. Those implementations are registered to JAX-RS via the supported interfaces and the supported media types.
> WIth STANBOL-1165 support for Sesame was added to the Stanbol Entityhub, but serialization of Sesame backed Representation to RDF based media formats is still done by the Clerezza serializers what is extremely inefficient as (1) the Sesame Model needs to be converted to a Clerezza backed model requiring to copy all the data field by field (2) Clerezza internally will use the Jena serializer via a Clerzza/Jena adapter.
> To avoid this the Entityhub requires an extendable serializer framework that allows to register ModelWriter for specific Entityhub Model implementation. For Sesame this will be done within STANBOL-1234.
> The MessageBodyWirter extension point provided by JAX-RS can not be used for this as there are no native implementations for Entity and QueryResultList. Also the use of generic types is not an option as the Entity interface does  not use the same.
> Because of that this issue will introduce an new extension point called "ModelWriter" that can be implemented by modules that need to provide native serialization support for Representation implementations. ModelWriter will be registered as OSGI services. A ModelWriterRegistry will be responsible for tracking those. Three MessageBodyWriter implementation for Representation, Entity and QueryResultList will use this registry to forward the calls of JAX-RS to the best fitting ModelWriter service.
> In addition this will provide two ModelWriter implementations (1) for 'application/json' with no specific native type and (2) for the various RDF formats with native Support for the Clerezza Model implementation.
> STANBOL-1234 will provide a third implementation of a ModelWriter for the Sesame model implementation.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)