Skip to content

Commit 90908eb

Browse files
author
Miel Vander Sande
committed
Make MIMEparse more forgiven
1 parent bee673a commit 90908eb

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/main/java/org/linkeddatafragments/servlet/LinkedDataFragmentServlet.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.File;
55
import java.io.FileReader;
66
import java.io.IOException;
7+
import java.nio.charset.StandardCharsets;
78
import java.util.ArrayList;
89
import java.util.Collection;
910
import java.util.HashMap;
@@ -13,6 +14,8 @@
1314
import javax.servlet.http.HttpServlet;
1415
import javax.servlet.http.HttpServletRequest;
1516
import javax.servlet.http.HttpServletResponse;
17+
18+
import org.apache.http.HttpHeaders;
1619
import org.apache.jena.riot.Lang;
1720
import org.linkeddatafragments.config.ConfigReader;
1821
import org.linkeddatafragments.datasource.DataSourceFactory;
@@ -94,10 +97,10 @@ public void init(ServletConfig servletConfig) throws ServletException {
9497

9598
// register content types
9699
MIMEParse.register("text/html");
97-
MIMEParse.register(Lang.TTL.getHeaderString());
98-
MIMEParse.register(Lang.JSONLD.getHeaderString());
99-
MIMEParse.register(Lang.NTRIPLES.getHeaderString());
100100
MIMEParse.register(Lang.RDFXML.getHeaderString());
101+
MIMEParse.register(Lang.NTRIPLES.getHeaderString());
102+
MIMEParse.register(Lang.JSONLD.getHeaderString());
103+
MIMEParse.register(Lang.TTL.getHeaderString());
101104
} catch (Exception e) {
102105
throw new ServletException(e);
103106
}
@@ -158,12 +161,13 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
158161
ILinkedDataFragment fragment = null;
159162
try {
160163
// do conneg
161-
String bestMatch = MIMEParse.bestMatch(request.getHeader("Accept"));
164+
String acceptHeader = request.getHeader(HttpHeaders.ACCEPT);
165+
String bestMatch = MIMEParse.bestMatch(acceptHeader);
162166

163167
// set additional response headers
164-
response.setHeader("Server", "Linked Data Fragments Server");
168+
response.setHeader(HttpHeaders.SERVER, "Linked Data Fragments Server");
165169
response.setContentType(bestMatch);
166-
response.setCharacterEncoding("utf-8");
170+
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
167171

168172
// create a writer depending on the best matching mimeType
169173
ILinkedDataFragmentWriter writer = LinkedDataFragmentWriterFactory.create(config.getPrefixes(), dataSources, bestMatch);
@@ -189,11 +193,13 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
189193
throw new ServletException(ex1);
190194
}
191195
} catch (Exception e) {
196+
e.printStackTrace();
192197
response.setStatus(500);
193198
writer.writeError(response.getOutputStream(), e);
194199
}
195200

196201
} catch (Exception e) {
202+
e.printStackTrace();
197203
throw new ServletException(e);
198204
}
199205
finally {

src/main/java/org/linkeddatafragments/util/MIMEParse.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,11 @@ public static String bestMatch(List<String> supported, String header) throws NoR
264264

265265
List<ParseResults> parseResults = new LinkedList<ParseResults>();
266266
List<FitnessAndQuality> weightedMatches = new LinkedList<FitnessAndQuality>();
267-
for (String r : StringUtils.split(header, ','))
268-
parseResults.add(parseMediaRange(r));
267+
for (String r : StringUtils.split(header, ',')) {
268+
try {
269+
parseResults.add(parseMediaRange(r));
270+
} catch (Exception ex) {} // Fail silently on malformed media type and omit from list.
271+
}
269272

270273
for (String s : supported)
271274
{
@@ -274,10 +277,13 @@ public static String bestMatch(List<String> supported, String header) throws NoR
274277
fitnessAndQuality.mimeType = s;
275278
weightedMatches.add(fitnessAndQuality);
276279
}
277-
Collections.sort(weightedMatches);
278280

281+
282+
283+
Collections.sort(weightedMatches);
279284
FitnessAndQuality lastOne = weightedMatches
280285
.get(weightedMatches.size() - 1);
286+
281287
return NumberUtils.compare(lastOne.quality, 0) != 0 ? lastOne.mimeType : supported.get(0);
282288
}
283289

0 commit comments

Comments
 (0)