model.read(inputStream,baseIRI,mimeType)抛出java.lang.Exception:com.hp.hpl.jena.shared.NoReaderForLangException:application / ld + json

时间:2017-02-07 06:22:17

标签: java jena apache-jena

这是我从HttpResponse正文数据中读取Model(在Apache Jena中)的函数

1)public static Model accessModelFromResponse(HttpResponse response) throws Exception {

2)        Header contentType = response.getFirstHeader("Content-Type");
3)        String mimeType = contentType.getValue();


4)        String data = "";
5)        if(mimeType.equals("application/ld+json"))
6)        {
7)            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
8)            String json;
9)            while ((json = reader.readLine()) != null) {
10)                data += json;
11)            }
12)        }
13)        else if(mimeType.equals("application/json"))
14)        {
15)            data = (String) Services.addContextToJson(response);
16)            mimeType = "application/ld+json";
17)        }
18)        else
19)        {
20)           throw new Exception("Data is not json/jsonld type");
21)        }
22)        InputStream in = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));

23)        Model model = ModelFactory.createDefaultModel();
24)        try {
25)            model.read(in, "http://myweb.com/", mimeType);
26)        } catch (Exception ex) {
27)            throw ex;
28)        }
29)        return model;
30)    }

当我使用带有jdk 8的Jena 3.1.0版本时,Everthing工作正常。
但后来为了支持jdk 7我将Jena版本更改为2.13.0并且事情变得更糟。
它抛出java.lang.Exception:com.hp.hpl.jena.shared.NoReaderForLangException:应用程序/ ld + json错误,它发生在第27行。

我认为Jena 2.13.0不支持application / ld + json语言。
我发现如果我在上面设置mimeType的model.read()的第三个参数代码为“JSONLD”它工作正常。但是我仍然怀疑为什么application / ld + json在Jena 3.1.0中工作正常时不能正常工作?仅在以后的版本中支持此功能吗?

1 个答案:

答案 0 :(得分:0)

model.read使用的是一种语言的名称,而不是MIME类型,并且在Jena 2.13.0中没有使用mime类型。您可以在RDFParserRegistry中查找MIME类型和/或使用RDFDataMgr进行阅读。