Skip to content

Commit

Permalink
fix: media type handle
Browse files Browse the repository at this point in the history
  • Loading branch information
berezovskyi committed Feb 21, 2025
1 parent c7b064f commit 25cab45
Showing 1 changed file with 48 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFReaderI;
import org.apache.jena.rdf.model.RDFWriterI;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.riot.RDFLanguages;
import org.apache.jena.util.FileUtils;
import org.eclipse.lyo.oslc4j.core.OSLC4JConstants;
Expand Down Expand Up @@ -85,8 +87,9 @@ public abstract class AbstractOslcRdfXmlProvider
private @Context HttpHeaders httpHeaders; // Available only on the server
protected @Context HttpServletRequest httpServletRequest; // Available only on the server
private @Context Providers providers; // Available on both client and server
private List<Map.Entry<MediaType, String>> mediaPairs;

protected AbstractOslcRdfXmlProvider()
protected AbstractOslcRdfXmlProvider()
{
super();
}
Expand Down Expand Up @@ -252,31 +255,13 @@ protected void writeTo(final boolean queryResult,
* applicaton/xml yields abbreviated xml
*/
private String getSerializationLanguage(final MediaType baseMediaType) {

if(baseMediaType == null) {
throw new IllegalArgumentException("Base media type can't be null");
}

List<Map.Entry<MediaType, String>> mediaPairs = new ArrayList<>();
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.TEXT_TURTLE_TYPE,
RDFLanguages.strLangTurtle));
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_JSON_LD_TYPE,
RDFLanguages.strLangJSONLD));
if (OSLC4JUtils.alwaysAbbrevXML()) {
// application/rdf+xml will be forcefully abbreviated
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_RDF_XML_TYPE,
FileUtils.langXMLAbbrev));
} else {
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_RDF_XML_TYPE,
RDFLanguages.strLangRDFXML));

}
// application/xml will be abbreviated for compat reasons
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_XML_TYPE,
FileUtils.langXMLAbbrev));

mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.TEXT_XML_TYPE,
RDFLanguages.strLangRDFXML));
if (mediaPairs == null) {
buildMediaPairs();
}

for (Map.Entry<MediaType, String> mediaPair : mediaPairs) {
if (baseMediaType.isCompatible(mediaPair.getKey())) {
Expand All @@ -290,15 +275,38 @@ private String getSerializationLanguage(final MediaType baseMediaType) {
throw new IllegalArgumentException("Base media type can't be matched to any writer");
}

protected Object[] readFrom(final Class<?> type,
private void buildMediaPairs() {
mediaPairs = new ArrayList<>();
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.TEXT_TURTLE_TYPE,
RDFLanguages.strLangTurtle));
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_JSON_LD_TYPE,
RDFLanguages.strLangJSONLD));
if (OSLC4JUtils.alwaysAbbrevXML()) {
// application/rdf+xml will be forcefully abbreviated
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_RDF_XML_TYPE,
FileUtils.langXMLAbbrev));
} else {
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_RDF_XML_TYPE,
RDFLanguages.strLangRDFXML));

}
// application/xml will be abbreviated for compat reasons
mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.APPLICATION_XML_TYPE,
FileUtils.langXMLAbbrev));

mediaPairs.add(new AbstractMap.SimpleEntry<>(OslcMediaType.TEXT_XML_TYPE,
RDFLanguages.strLangRDFXML));
}

protected Object[] readFrom(final Class<?> type,
final MediaType mediaType,
final MultivaluedMap<String, String> map,
final InputStream inputStream)
throws WebApplicationException
{
final Model model = ModelFactory.createDefaultModel();

RDFReaderI reader = getRdfReader(mediaType, model);
// RDFReaderI reader = getRdfReader(mediaType, model);

try
{
Expand All @@ -307,8 +315,10 @@ protected Object[] readFrom(final Class<?> type,
// for OSLC link labels. See this section of the CM specification
// for an example:
// http://open-services.net/bin/view/Main/CmSpecificationV2?sortcol=table;up=#Labels_for_Relationships

reader.read(model, inputStream, "");
var lang = getSerializationLanguage(mediaType);
Lang jenaLang = RDFLanguages.contentTypeToLang(lang);
RDFDataMgr.read(model, inputStream, jenaLang);
// reader.read(model, inputStream, "");

return JenaModelHelper.unmarshal(model, type);
}
Expand All @@ -321,18 +331,18 @@ protected Object[] readFrom(final Class<?> type,
}
}

private RDFReaderI getRdfReader(final MediaType mediaType, final Model model) {
RDFReaderI reader;
final String language = getSerializationLanguage(mediaType);
if (language.equals(FileUtils.langXMLAbbrev))
{
reader = model.getReader(); // Default reader handles both xml and abbreviated xml
} else {
reader=model.getReader(language);
}
reader.setErrorHandler(ERROR_HANDLER);
return reader;
}
// private RDFReaderI getRdfReader(final MediaType mediaType, final Model model) {
// RDFReaderI reader;
// final String language = getSerializationLanguage(mediaType);
// if (language.equals(FileUtils.langXMLAbbrev))
// {
// reader = model.getReader(); // Default reader handles both xml and abbreviated xml
// } else {
// reader=model.getReader(language);
// }
// reader.setErrorHandler(ERROR_HANDLER);
// return reader;
// }

protected Response buildBadRequestResponse(final Exception exception,
final MediaType initialErrorMediaType,
Expand Down

0 comments on commit 25cab45

Please # to comment.