You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/02/22 18:14:14 UTC

[isis] branch master updated: ISIS-1870 fix MediaType parser errors on initialization

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 8d3a7e1  ISIS-1870 fix MediaType parser errors on initialization
8d3a7e1 is described below

commit 8d3a7e154589469a5264b04494769b394125f8e0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Feb 22 19:14:10 2018 +0100

    ISIS-1870 fix MediaType parser errors on initialization
---
 .../restfulobjects/applib/RepresentationType.java  | 22 ++++++--
 .../restfulobjects/applib/util/MediaTypes.java     | 58 ++++++++++++++++++++++
 2 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
index 1a6cf5d..3a250ec 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
@@ -44,6 +44,7 @@ import org.apache.isis.viewer.restfulobjects.applib.domaintypes.TypeListRepresen
 import org.apache.isis.viewer.restfulobjects.applib.errors.ErrorRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.homepage.HomePageRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.user.UserRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.util.MediaTypes;
 import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
 import org.apache.isis.viewer.restfulobjects.applib.version.VersionRepresentation;
 
@@ -139,11 +140,22 @@ public enum RepresentationType {
     private MediaType xmlMediaType;
     private final Class<? extends JsonRepresentation> representationClass;
 
-    private RepresentationType(final String jsonMediaTypeStr, final String xmlMediaTypeStr, final Class<? extends JsonRepresentation> representationClass) {
-        this(jsonMediaTypeStr != null ? MediaType.valueOf(jsonMediaTypeStr) : null, xmlMediaTypeStr != null? MediaType.valueOf(xmlMediaTypeStr): null, representationClass);
+    private RepresentationType(
+    		final String jsonMediaTypeStr, 
+    		final String xmlMediaTypeStr, 
+    		final Class<? extends JsonRepresentation> representationClass) {
+    	
+        this(	jsonMediaTypeStr != null ? MediaTypes.parse(jsonMediaTypeStr) : null, 
+        		xmlMediaTypeStr != null ? MediaTypes.parse(xmlMediaTypeStr) : null, 
+        		representationClass
+        		);
     }
 
-    private RepresentationType(final MediaType jsonMediaType, final MediaType xmlMediaType, final Class<? extends JsonRepresentation> representationClass) {
+    private RepresentationType(
+    		final MediaType jsonMediaType, 
+    		final MediaType xmlMediaType, 
+    		final Class<? extends JsonRepresentation> representationClass) {
+    	
         this.xmlMediaType = xmlMediaType;
         this.representationClass = representationClass;
         this.name = Enums.enumToCamelCase(this);
@@ -177,14 +189,14 @@ public enum RepresentationType {
      * parameter value.
      */
     public MediaType getMediaType(String parameter, String paramValue) {
-        return getMediaType(Collections.singletonMap(parameter, paramValue));
+        return getJsonMediaType(Collections.singletonMap(parameter, paramValue));
     }
 
     /**
      * Clones the (immutable) {@link #getMediaType() media type}, adding all provided
      * parameters.
      *
-     * @deprecated - use {@link #getMediaType(Map)} instead.
+     * @deprecated - use {@link #getJsonMediaType(Map)} instead.
      */
     @Deprecated
     public MediaType getMediaType(Map<String, String> mediaTypeParams) {
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/MediaTypes.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/MediaTypes.java
new file mode 100644
index 0000000..309dea4
--- /dev/null
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/MediaTypes.java
@@ -0,0 +1,58 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.restfulobjects.applib.util;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.isis.applib.internal.base._Strings;
+
+public class MediaTypes {
+
+	/**
+	 * Same as {@code MediaType.valueOf(type)}, but with fallback in case {@code MediaType.valueOf(type)}
+	 * throws an IllegalArgumentException.
+	 * <br/><br/>
+	 * The fallback is to retry with String {@code type} cut off at first occurrence of a semicolon (;).
+	 * 
+	 * @param type
+	 * @return
+	 */
+	public static MediaType parse(String type) {
+
+		if(type==null)
+			return MediaType.valueOf(null); 
+		
+		try {
+			
+			return MediaType.valueOf(type);
+			
+		} catch (IllegalArgumentException e) {
+
+			return _Strings.splitThenStream(type, ";")
+			.findFirst()
+			.map(MediaType::valueOf)
+			.orElseThrow(()->e); // could can't be reached, but re-throw the original exception just in case
+			
+		}
+		
+		
+	}
+
+}

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.