Package org.apache.clerezza.triaxrs.util

Examples of org.apache.clerezza.triaxrs.util.AcceptHeader$AcceptHeaderEntry


    entryStrings.add("*/*;q=.1");
    entryStrings.add("image/png;q=1");
    entryStrings.add("image/jpeg");
    entryStrings.add("image/*;q=.3");
    entryStrings.add("text/*;q=.3");
    AcceptHeader acceptHeader = new AcceptHeader(entryStrings);
    Assert.assertEquals(1000, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/jpeg")));
    Assert.assertEquals(1000, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/png")));
    Assert.assertEquals(300, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/x-foo")));
    Assert.assertEquals(300, acceptHeader.getAcceptedQuality(MediaType.valueOf("text/plain")));
    Assert.assertEquals(100, acceptHeader.getAcceptedQuality(MediaType.valueOf("application/pdf")));
  }
View Full Code Here


    List<String> entryStrings = new ArrayList<String>();
    entryStrings.add("image/png;q=1");
    entryStrings.add("image/jpeg");
    entryStrings.add("image/*;q=.3");
    entryStrings.add("text/*;q=.3");
    AcceptHeader acceptHeader = new AcceptHeader(entryStrings);
    Assert.assertEquals(1000, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/jpeg")));
    Assert.assertEquals(1000, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/png")));
    Assert.assertEquals(300, acceptHeader.getAcceptedQuality(MediaType.valueOf("image/x-foo")));
    Assert.assertEquals(300, acceptHeader.getAcceptedQuality(MediaType.valueOf("text/plain")));
    Assert.assertEquals(0, acceptHeader.getAcceptedQuality(MediaType.valueOf("application/pdf")));
  }
View Full Code Here

        throw new WebApplicationException(405);
      }

      Set<MethodAndInputType> invocableMethods = filterByConsumedType(
          httpMatchingMethods, request);
      AcceptHeader acceptHeader = request.getAcceptHeader();
      SortedSet<MethodAndConsumedAndProducibleTypes> acceptableMethods = new TreeSet<MethodAndConsumedAndProducibleTypes>(
          filterByAcceptHeader(invocableMethods, acceptHeader));

      if (acceptableMethods.size() == 0) {
        throw new WebApplicationException(406);
View Full Code Here

  @Override
  public AcceptHeader getAcceptHeader() {
    if (acceptHeader == null) {
      final List<String> acceptHeaderStrings = getHeaders().get(HttpHeaders.ACCEPT);
      logger.debug("Accept-Header: {}", acceptHeaderStrings);
      acceptHeader = new AcceptHeader(acceptHeaderStrings);
    }
    return acceptHeader;
  }
View Full Code Here

    }

    // get best writer
    List<MediaType> methodProducibleMediaTypesList = new ArrayList<MediaType>(
        methodProducibleMediaTypes);
    AcceptHeader acceptHeader = request.getAcceptHeader();
    if (methodProducibleMediaTypesList.size() == 0) {
      methodProducibleMediaTypesList.add(MediaType.WILDCARD_TYPE);
    }
    final List<MediaType> expandedMethodProducibleMediaTypesList = expandListWithConcreterTypesFromAccept(methodProducibleMediaTypesList, acceptHeader);
    MessageBodyWriter<Object> writer = null;
    List<Set<MediaType>> expandedMethodProducibleMediaTypeClasses
        = getSortedClasses(expandedMethodProducibleMediaTypesList,
        new InconsistentMediaTypeComparator(acceptHeader));
    Collections.sort(methodProducibleMediaTypesList,
        new MediaTypeComparator(acceptHeader));
    MediaType relevantMethodProducibleType = null;

    for (Set<MediaType> preferenceClass : expandedMethodProducibleMediaTypeClasses) {
      int lastWriterConcreteness = -1;
      for (MediaType mediaType : preferenceClass) {
        MessageBodyWriter<Object> currentWriter = (MessageBodyWriter<Object>) JaxRsHandler.providers.getMessageBodyWriter(entity.getClass(), entityType,
            annotations, mediaType);
        if (currentWriter != null) {
          int writerConcreteness = getWriterConcreteness(currentWriter, mediaType);
          if (writerConcreteness > lastWriterConcreteness) {
            for (MediaType methodMediaType : methodProducibleMediaTypesList) {
              if (methodMediaType.isCompatible(mediaType)) {
                relevantMethodProducibleType = methodMediaType;
                break;
              }
            }
            writer = currentWriter;
          }
        }
      }
      if (writer != null) {
        break;
      }
    }


    if (writer == null) {
      for (MediaType mediaType : expandedMethodProducibleMediaTypesList) {
        try {
          writer = new JafMessageBodyWriter<Object>(entity, mediaType);
        } catch (UnsupportedDataTypeException ex) {
          logger.debug("No JafMessageBodyWriter for {}", mediaType);
        }
        if (writer != null) {
          relevantMethodProducibleType = mediaType;
          break;
        }
      }
    }
    if (writer == null) {
      javax.ws.rs.core.Response r = javax.ws.rs.core.Response.status(
          Status.INTERNAL_SERVER_ERROR).entity(
          "No suitable MessageBodyWriter available").type(
          MediaType.TEXT_PLAIN_TYPE).build();
      throw new WebApplicationException(r);
    }

    // gain producible concreteness by looking at writer's @Produces
    MediaType relevantProducibleType = null;
    if ((relevantMethodProducibleType == null) || (MediaTypeComparator.countWildChars(relevantMethodProducibleType) > 0)) {

      List<MediaType> writerProducibleMediaTypes = getWriterProduces(writer);
      Collections.sort(writerProducibleMediaTypes,
          new MediaTypeComparator(acceptHeader));
      if (relevantMethodProducibleType != null) {
        Iterator<MediaType> writerProducibleMediaTypesIter = writerProducibleMediaTypes.iterator();
        while (writerProducibleMediaTypesIter.hasNext()) {
          MediaType currentProducible = writerProducibleMediaTypesIter.next();
          if (!relevantMethodProducibleType.isCompatible(currentProducible)) {
            continue;
          }
          if (MediaTypeComparator.compareByWildCardCount(
              relevantMethodProducibleType, currentProducible) == 1) {
            relevantProducibleType = currentProducible;
          } else {
            relevantProducibleType = relevantMethodProducibleType;
          }
          break;
        }
      } else {
        relevantProducibleType = writerProducibleMediaTypes.get(0);
      }
    } else {
      relevantProducibleType = relevantMethodProducibleType;
    }
    if (relevantProducibleType == null) {
      throw new RuntimeException("The relevantMethodProducibleType " + relevantMethodProducibleType + " is not compatible with any of the producible types of " + writer);
    }

    // if relevantProducibleType is not concrete get the first matching
    // concrete from accept
    MediaType mediaType;
    if (MediaTypeComparator.countWildChars(relevantProducibleType) == 0) {
      mediaType = relevantProducibleType;
    } else {
      mediaType = relevantProducibleType;
      for (MediaType acceptType : acceptHeader.getEntries()) {
        if (acceptType.isCompatible(relevantProducibleType)) {
          if (MediaTypeComparator.compareByWildCardCount(acceptType,
              mediaType) == 1) {
            mediaType = acceptType;
          }
        }
      }
    }

    if (acceptHeader.getAcceptingMediaType(mediaType).isEmpty()) {
      if (!mediaType.equals(MediaType.TEXT_HTML_TYPE)) {
        throw new WebApplicationException(406);
      }
    }
View Full Code Here

TOP

Related Classes of org.apache.clerezza.triaxrs.util.AcceptHeader$AcceptHeaderEntry

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.