Repository: incubator-juneau Updated Branches: refs/heads/master 22b24ff57 -> 738a0d2b4
Jena parsers are not using _type attributes like the rest of the API. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/738a0d2b Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/738a0d2b Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/738a0d2b Branch: refs/heads/master Commit: 738a0d2b49ac86254c3df1b455555c1146083bc9 Parents: 22b24ff Author: JamesBognar <[email protected]> Authored: Thu Feb 2 21:04:53 2017 -0500 Committer: JamesBognar <[email protected]> Committed: Thu Feb 2 21:04:53 2017 -0500 ---------------------------------------------------------------------- .../java/org/apache/juneau/jena/Constants.java | 2 +- .../java/org/apache/juneau/jena/RdfParser.java | 34 +++++++++++--------- .../apache/juneau/jena/RdfParserSession.java | 18 +++++------ .../org/apache/juneau/jena/RdfSerializer.java | 8 ++--- .../juneau/jena/RdfSerializerSession.java | 8 ++--- .../apache/juneau/jena/CommonParserTest.java | 6 ++-- 6 files changed, 39 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/Constants.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/Constants.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/Constants.java index 1e4d8ea..00873ba 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/Constants.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/Constants.java @@ -67,7 +67,7 @@ public final class Constants { * <p> * Added if {@link SerializerContext#SERIALIZER_addBeanTypeProperties} setting is enabled. */ - public static final String RDF_juneauNs_CLASS = "class"; + public static final String RDF_juneauNs_TYPE = "_type"; /** * RDF property identifier <js>"value"</js>. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java index c62938d..26a9697 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java @@ -124,7 +124,7 @@ public class RdfParser extends ReaderParser { else c = (type.canCreateNewInstance(session.getOuter()) ? (Collection<?>)type.newInstance(session.getOuter()) : new ObjectList(session)); for (Resource resource : roots) - c.add(parseAnything(s, type.getElementType(), resource, session.getOuter())); + c.add(parseAnything(s, type.getElementType(), resource, session.getOuter(), null)); if (type.isArray()) return (T)session.toArray(type, c); @@ -137,7 +137,7 @@ public class RdfParser extends ReaderParser { throw new ParseException(session, "Too many root nodes found in model: {0}", roots.size()); Resource resource = roots.get(0); - return parseAnything(s, type, resource, session.getOuter()); + return parseAnything(s, type, resource, session.getOuter(), null); } /* @@ -202,18 +202,18 @@ public class RdfParser extends ReaderParser { ClassMeta<?> cm = pMeta.getClassMeta(); if (cm.isCollectionOrArray() && isMultiValuedCollections(session, pMeta)) { ClassMeta<?> et = cm.getElementType(); - Object value = parseAnything(session, et, o, m.getBean(false)); + Object value = parseAnything(session, et, o, m.getBean(false), pMeta); setName(et, value, key); pMeta.add(m, value); } else { - Object value = parseAnything(session, cm, o, m.getBean(false)); + Object value = parseAnything(session, cm, o, m.getBean(false), pMeta); setName(cm, value, key); pMeta.set(m, value); } - } else if (! (p.equals(session.getRootProperty()) || p.equals(session.getClassProperty()) || p.equals(subTypeIdProperty))) { + } else if (! (p.equals(session.getRootProperty()) || p.equals(session.getTypeProperty()) || p.equals(subTypeIdProperty))) { if (bm.isSubTyped()) { RDFNode o = st.getObject(); - Object value = parseAnything(session, object(), o, m.getBean(false)); + Object value = parseAnything(session, object(), o, m.getBean(false), pMeta); m.put(key, value); } else { onUnknownProperty(session, key, m, -1, -1); @@ -231,20 +231,22 @@ public class RdfParser extends ReaderParser { } @SuppressWarnings({ "unchecked", "rawtypes" }) - private <T> T parseAnything(RdfParserSession session, ClassMeta<T> eType, RDFNode n, Object outer) throws Exception { + private <T> T parseAnything(RdfParserSession session, ClassMeta<T> eType, RDFNode n, Object outer, BeanPropertyMeta pMeta) throws Exception { if (eType == null) eType = (ClassMeta<T>)object(); PojoSwap<T,Object> transform = (PojoSwap<T,Object>)eType.getPojoSwap(); ClassMeta<?> sType = eType.getSerializedClassMeta(); session.setCurrentClass(sType); + BeanRegistry breg = pMeta == null ? session.getBeanRegistry() : pMeta.getBeanRegistry(); if (! sType.canCreateNewInstance(outer)) { if (n.isResource()) { - Statement st = n.asResource().getProperty(session.getClassProperty()); + Statement st = n.asResource().getProperty(session.getTypeProperty()); if (st != null) { String c = st.getLiteral().getString(); - sType = eType = (ClassMeta<T>)session.getClassMetaFromString(c); + if (breg.hasName(c)) + sType = eType = (ClassMeta<T>)breg.getClassMeta(c); } } } @@ -264,7 +266,7 @@ public class RdfParser extends ReaderParser { if (session.wasAlreadyProcessed(r)) o = r.getURI(); else if (r.getProperty(session.getValueProperty()) != null) { - o = parseAnything(session, object(), n.asResource().getProperty(session.getValueProperty()).getObject(), outer); + o = parseAnything(session, object(), n.asResource().getProperty(session.getValueProperty()).getObject(), outer, null); } else if (isSeq(session, r)) { o = new ObjectList(session); parseIntoCollection(session, r.as(Seq.class), (Collection)o, sType.getElementType()); @@ -355,7 +357,7 @@ public class RdfParser extends ReaderParser { private boolean isSeq(RdfParserSession session, RDFNode n) { if (n.isResource()) { - Statement st = n.asResource().getProperty(session.getTypeProperty()); + Statement st = n.asResource().getProperty(session.getRdfTypeProperty()); if (st != null) return RDF_SEQ.equals(st.getResource().getURI()); } @@ -364,7 +366,7 @@ public class RdfParser extends ReaderParser { private boolean isBag(RdfParserSession session, RDFNode n) { if (n.isResource()) { - Statement st = n.asResource().getProperty(session.getTypeProperty()); + Statement st = n.asResource().getProperty(session.getRdfTypeProperty()); if (st != null) return RDF_BAG.equals(st.getResource().getURI()); } @@ -380,7 +382,7 @@ public class RdfParser extends ReaderParser { n = st.getObject(); if (n.isLiteral()) return n.asLiteral().getValue(); - return parseAnything(session, object(), st.getObject(), outer); + return parseAnything(session, object(), st.getObject(), outer, null); } } throw new ParseException(session, "Unknown value type for node ''{0}''", n); @@ -401,7 +403,7 @@ public class RdfParser extends ReaderParser { key = session.decodeString(key); RDFNode o = st.getObject(); K key2 = convertAttrToType(session, m, key, keyType); - V value = parseAnything(session, valueType, o, m); + V value = parseAnything(session, valueType, o, m, null); setName(valueType, value, key); m.put(key2, value); } @@ -413,7 +415,7 @@ public class RdfParser extends ReaderParser { private <E> Collection<E> parseIntoCollection(RdfParserSession session, Container c, Collection<E> l, ClassMeta<E> et) throws Exception { for (NodeIterator ni = c.iterator(); ni.hasNext();) { - E e = parseAnything(session, et, ni.next(), l); + E e = parseAnything(session, et, ni.next(), l, null); l.add(e); } return l; @@ -421,7 +423,7 @@ public class RdfParser extends ReaderParser { private <E> Collection<E> parseIntoCollection(RdfParserSession session, RDFList list, Collection<E> l, ClassMeta<E> et) throws Exception { for (ExtendedIterator<RDFNode> ni = list.iterator(); ni.hasNext();) { - E e = parseAnything(session, et, ni.next(), l); + E e = parseAnything(session, et, ni.next(), l, null); l.add(e); } return l; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java index 4433b38..13ca513 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java @@ -34,7 +34,7 @@ public class RdfParserSession extends ParserSession { private final String rdfLanguage; private final Namespace juneauNs, juneauBpNs; - private final Property pRoot, pValue, pClass, pType; + private final Property pRoot, pValue, pType, pRdfType; private final Model model; private final boolean trimWhitespace, looseCollections; private final RDFReader rdfReader; @@ -88,8 +88,8 @@ public class RdfParserSession extends ParserSession { addModelPrefix(juneauBpNs); this.pRoot = model.createProperty(juneauNs.getUri(), RDF_juneauNs_ROOT); this.pValue = model.createProperty(juneauNs.getUri(), RDF_juneauNs_VALUE); - this.pClass = model.createProperty(juneauNs.getUri(), RDF_juneauNs_CLASS); - this.pType = model.createProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); + this.pType = model.createProperty(juneauNs.getUri(), RDF_juneauNs_TYPE); + this.pRdfType = model.createProperty("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); rdfReader = model.getReader(rdfLanguage); // Note: NTripleReader throws an exception if you try to set any properties on it. @@ -128,12 +128,12 @@ public class RdfParserSession extends ParserSession { } /** - * Returns the RDF property identifier <js>"class"</js>. + * Returns the RDF property identifier <js>"_type"</js>. * - * @return The RDF property identifier <js>"class"</js>. + * @return The RDF property identifier <js>"_type"</js>. */ - public final Property getClassProperty() { - return pClass; + public final Property getTypeProperty() { + return pType; } /** @@ -141,8 +141,8 @@ public class RdfParserSession extends ParserSession { * * @return The RDF property identifier <js>"type"</js>. */ - public final Property getTypeProperty() { - return pType; + public final Property getRdfTypeProperty() { + return pRdfType; } /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java index 83bad9d..c579001 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java @@ -259,10 +259,10 @@ public class RdfSerializer extends WriterSerializer { } if (session.isAddBeanTypeProperties() && n != null && n.isResource()) { - if (o != null && ! eType.equals(aType)) - n.asResource().addProperty(session.getClassProperty(), aType.toString()); - else if (o == null) - n.asResource().addProperty(session.getClassProperty(), eType.toString()); + if (o != null && aType.getDictionaryName() != null) + n.asResource().addProperty(session.getTypeProperty(), aType.getDictionaryName()); + else if (o == null && eType.getDictionaryName() != null) + n.asResource().addProperty(session.getTypeProperty(), eType.getDictionaryName()); } session.pop(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java index 1c8b55b..831ba08 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java @@ -36,7 +36,7 @@ public final class RdfSerializerSession extends SerializerSession { private final String rdfLanguage; private final Namespace juneauNs, juneauBpNs; private final boolean addLiteralTypes, addRootProperty, useXmlNamespaces, looseCollections, autoDetectNamespaces; - private final Property pRoot, pValue, pClass; + private final Property pRoot, pValue, pType; private final Model model; private final RDFWriter writer; private final RdfCollectionFormat collectionFormat; @@ -98,7 +98,7 @@ public final class RdfSerializerSession extends SerializerSession { addModelPrefix(ns); this.pRoot = model.createProperty(juneauNs.getUri(), RDF_juneauNs_ROOT); this.pValue = model.createProperty(juneauNs.getUri(), RDF_juneauNs_VALUE); - this.pClass = model.createProperty(juneauNs.getUri(), RDF_juneauNs_CLASS); + this.pType = model.createProperty(juneauNs.getUri(), RDF_juneauNs_TYPE); writer = model.getWriter(rdfLanguage); // Only apply properties with this prefix! @@ -224,8 +224,8 @@ public final class RdfSerializerSession extends SerializerSession { * * @return The RDF property that represents a class in the RDF model. */ - public final Property getClassProperty() { - return pClass; + public final Property getTypeProperty() { + return pType; } /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/738a0d2b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonParserTest.java index 04a7f67..5bd851f 100755 --- a/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonParserTest.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/jena/CommonParserTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.Bean; import org.apache.juneau.parser.*; import org.apache.juneau.serializer.*; import org.junit.*; @@ -112,14 +113,13 @@ public class CommonParserTest { s.setProperty(SERIALIZER_addBeanTypeProperties, true); in = strip(s.serialize(t1)); - assertEquals("<rdf:Description><j:class>"+A1.class.getName()+"</j:class><jp:list><rdf:Seq><rdf:li rdf:parseType='Resource'><jp:name>name0</jp:name><jp:value>value0</jp:value></rdf:li><rdf:li rdf:parseType='Resource'><jp:name>name1</jp:name><jp:value>value1</jp:value></rdf:li></rdf:Seq></jp:list></rdf:Description>", in); + assertEquals("<rdf:Description><j:_type>A1</j:_type><jp:list><rdf:Seq><rdf:li rdf:parseType='Resource'><jp:name>name0</jp:name><jp:value>value0</jp:value></rdf:li><rdf:li rdf:parseType='Resource'><jp:name>name1</jp:name><jp:value>value1</jp:value></rdf:li></rdf:Seq></jp:list></rdf:Description>", in); in = wrap(in); - t1 = (A1)p.parse(in, Object.class); - assertEquals("value1", t1.list.get(1).value); t1 = p.parse(in, A1.class); assertEquals("value1", t1.list.get(1).value); } + @Bean(typeName="A1") public static class A1 { public A2 list; }
