// *************************************************************************************************************************** | |
// * 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.juneau.jena; | |
import static org.apache.juneau.jena.RdfCommon.*; | |
import static org.apache.juneau.testutils.TestUtils.*; | |
import java.net.*; | |
import java.util.*; | |
import org.apache.juneau.jena.annotation.*; | |
import org.apache.juneau.parser.*; | |
import org.apache.juneau.serializer.*; | |
import org.junit.*; | |
@SuppressWarnings({"serial"}) | |
public class RdfTest { | |
@Test | |
public void testCollectionFormatProperties() throws Exception { | |
A a = new A().init(), a2; | |
String rdfXml; | |
String expected; | |
RdfSerializerBuilder s = RdfSerializer.create().xmlabbrev() | |
.set(RDF_rdfxml_tab, 3) | |
.sq() | |
.addRootProperty(); | |
RdfParser p = RdfParser.create().xml().build(); | |
//------------------------------------------------------------------------------------------------------------- | |
// Normal format - Sequence | |
//------------------------------------------------------------------------------------------------------------- | |
expected = | |
"<rdf:RDF a='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/a'>" | |
+ "\n <a:f2>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </a:f2>" | |
+ "\n <a:f3>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>1</rdf:li>" | |
+ "\n <rdf:li>2</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </a:f3>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(a); | |
assertXmlEquals(expected, rdfXml); | |
a2 = p.parse(rdfXml, A.class); | |
assertEqualObjects(a, a2); | |
//------------------------------------------------------------------------------------------------------------- | |
// Explicit sequence | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.SEQ); | |
expected = | |
"<rdf:RDF a='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/a'>" | |
+ "\n <a:f2>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </a:f2>" | |
+ "\n <a:f3>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>1</rdf:li>" | |
+ "\n <rdf:li>2</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </a:f3>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(a); | |
assertXmlEquals(expected, rdfXml); | |
a2 = p.parse(rdfXml, A.class); | |
assertEqualObjects(a, a2); | |
//------------------------------------------------------------------------------------------------------------- | |
// Bag | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.BAG); | |
expected = | |
"<rdf:RDF a='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/a'>" | |
+ "\n <a:f2>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </a:f2>" | |
+ "\n <a:f3>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>1</rdf:li>" | |
+ "\n <rdf:li>2</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </a:f3>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(a); | |
assertXmlEquals(expected, rdfXml); | |
a2 = p.parse(rdfXml, A.class); | |
assertEqualObjects(a, a2); | |
//------------------------------------------------------------------------------------------------------------- | |
// List | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.LIST); | |
expected = | |
"<rdf:RDF a='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/a'>" | |
+ "\n <a:f2 parseType='Resource'>" | |
+ "\n <rdf:first>f2a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f2b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </a:f2>" | |
+ "\n <a:f3 parseType='Resource'>" | |
+ "\n <rdf:first>1</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>2</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </a:f3>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(a); | |
assertXmlEquals(expected, rdfXml); | |
a2 = p.parse(rdfXml, A.class); | |
assertEqualObjects(a, a2); | |
//------------------------------------------------------------------------------------------------------------- | |
// Multi-properties | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.MULTI_VALUED); | |
expected = | |
"<rdf:RDF a='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/a'>" | |
+ "\n <a:f2>f2a</a:f2>" | |
+ "\n <a:f2>f2b</a:f2>" | |
+ "\n <a:f3>1</a:f3>" | |
+ "\n <a:f3>2</a:f3>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(a); | |
assertXmlEquals(expected, rdfXml); | |
// Note - Must specify collection format on parser for it to be able to understand this layout. | |
p = RdfParser.create().xml().collectionFormat(RdfCollectionFormat.MULTI_VALUED).build(); | |
a2 = p.parse(rdfXml, A.class); | |
assertEqualObjects(a, a2); | |
} | |
@Rdf(prefix="a", namespace="http://ns/") | |
public static class A { | |
@Rdf(beanUri=true) public URI f1; | |
public String[] f2; | |
public List<Integer> f3; | |
public A init() throws Exception { | |
f1 = new URI("http://test/a"); | |
f2 = new String[]{"f2a","f2b"}; | |
f3 = Arrays.asList(new Integer[]{1,2}); | |
return this; | |
} | |
} | |
@Test | |
public void testCollectionFormatAnnotations() throws Exception { | |
B b = new B().init(), b2; | |
String rdfXml, expected; | |
RdfSerializerBuilder s = RdfSerializer.create().xmlabbrev() | |
.set(RDF_rdfxml_tab, 3) | |
.sq() | |
.addRootProperty(); | |
RdfParser p = RdfXmlParser.DEFAULT; | |
//------------------------------------------------------------------------------------------------------------- | |
// Normal format - Sequence | |
//------------------------------------------------------------------------------------------------------------- | |
expected = | |
"<rdf:RDF b='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/b'>" | |
+ "\n <b:f2>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f2>" | |
+ "\n <b:f3>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f3a</rdf:li>" | |
+ "\n <rdf:li>f3b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f3>" | |
+ "\n <b:f4 parseType='Resource'>" | |
+ "\n <rdf:first>f4a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f4b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f4>" | |
+ "\n <b:f5>f5a</b:f5>" | |
+ "\n <b:f5>f5b</b:f5>" | |
+ "\n <b:f6>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f6a</rdf:li>" | |
+ "\n <rdf:li>f6b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f6>" | |
+ "\n <b:f7>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f7a</rdf:li>" | |
+ "\n <rdf:li>f7b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f7>" | |
+ "\n <b:f8>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f8a</rdf:li>" | |
+ "\n <rdf:li>f8b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f8>" | |
+ "\n <b:f9 parseType='Resource'>" | |
+ "\n <rdf:first>f9a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f9b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f9>" | |
+ "\n <b:fa>faa</b:fa>" | |
+ "\n <b:fa>fab</b:fa>" | |
+ "\n <b:fb>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>fba</rdf:li>" | |
+ "\n <rdf:li>fbb</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:fb>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(b); | |
assertXmlEquals(expected, rdfXml); | |
b2 = p.parse(rdfXml, B.class); | |
assertEqualObjects(b, b2, true); | |
//------------------------------------------------------------------------------------------------------------- | |
// Default is Bag - Should only affect DEFAULT properties. | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.BAG); | |
expected = | |
"<rdf:RDF b='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/b'>" | |
+ "\n <b:f2>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f2>" | |
+ "\n <b:f3>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f3a</rdf:li>" | |
+ "\n <rdf:li>f3b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f3>" | |
+ "\n <b:f4 parseType='Resource'>" | |
+ "\n <rdf:first>f4a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f4b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f4>" | |
+ "\n <b:f5>f5a</b:f5>" | |
+ "\n <b:f5>f5b</b:f5>" | |
+ "\n <b:f6>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f6a</rdf:li>" | |
+ "\n <rdf:li>f6b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f6>" | |
+ "\n <b:f7>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f7a</rdf:li>" | |
+ "\n <rdf:li>f7b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f7>" | |
+ "\n <b:f8>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f8a</rdf:li>" | |
+ "\n <rdf:li>f8b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f8>" | |
+ "\n <b:f9 parseType='Resource'>" | |
+ "\n <rdf:first>f9a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f9b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f9>" | |
+ "\n <b:fa>faa</b:fa>" | |
+ "\n <b:fa>fab</b:fa>" | |
+ "\n <b:fb>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>fba</rdf:li>" | |
+ "\n <rdf:li>fbb</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:fb>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(b); | |
assertXmlEquals(expected, rdfXml); | |
b2 = p.parse(rdfXml, B.class); | |
assertEqualObjects(b, b2, true); | |
} | |
@Rdf(prefix="b", namespace="http://ns/") | |
public static class B { | |
@Rdf(beanUri=true) public URI f1; | |
@Rdf(collectionFormat=RdfCollectionFormat.SEQ) | |
public String[] f2; | |
@Rdf(collectionFormat=RdfCollectionFormat.BAG) | |
public String[] f3; | |
@Rdf(collectionFormat=RdfCollectionFormat.LIST) | |
public String[] f4; | |
@Rdf(collectionFormat=RdfCollectionFormat.MULTI_VALUED) | |
public String[] f5; | |
@Rdf(collectionFormat=RdfCollectionFormat.DEFAULT) | |
public String[] f6; | |
public BA f7; | |
public BB f8; | |
public BC f9; | |
public BD fa; | |
public BE fb; | |
public B init() throws Exception { | |
f1 = new URI("http://test/b"); | |
f2 = new String[]{"f2a","f2b"}; | |
f3 = new String[]{"f3a","f3b"}; | |
f4 = new String[]{"f4a","f4b"}; | |
f5 = new String[]{"f5a","f5b"}; | |
f6 = new String[]{"f6a","f6b"}; | |
f7 = new BA().append("f7a","f7b"); | |
f8 = new BB().append("f8a","f8b"); | |
f9 = new BC().append("f9a","f9b"); | |
fa = new BD().append("faa","fab"); | |
fb = new BE().append("fba","fbb"); | |
return this; | |
} | |
} | |
@Rdf(prefix="ba", namespace="http://ns/", collectionFormat=RdfCollectionFormat.SEQ) | |
public static class BA extends ArrayList<String> { | |
public BA append(String...s) { | |
this.addAll(Arrays.asList(s)); | |
return this; | |
} | |
} | |
@Rdf(prefix="bb", namespace="http://ns/", collectionFormat=RdfCollectionFormat.BAG) | |
public static class BB extends ArrayList<String> { | |
public BB append(String...s) { | |
this.addAll(Arrays.asList(s)); | |
return this; | |
} | |
} | |
@Rdf(prefix="bc", namespace="http://ns/", collectionFormat=RdfCollectionFormat.LIST) | |
public static class BC extends ArrayList<String> { | |
public BC append(String...s) { | |
this.addAll(Arrays.asList(s)); | |
return this; | |
} | |
} | |
@Rdf(prefix="bd", namespace="http://ns/", collectionFormat=RdfCollectionFormat.MULTI_VALUED) | |
public static class BD extends ArrayList<String> { | |
public BD append(String...s) { | |
this.addAll(Arrays.asList(s)); | |
return this; | |
} | |
} | |
@Rdf(prefix="bd", namespace="http://ns/", collectionFormat=RdfCollectionFormat.DEFAULT) | |
public static class BE extends ArrayList<String> { | |
public BE append(String...s) { | |
this.addAll(Arrays.asList(s)); | |
return this; | |
} | |
} | |
@Test | |
public void testCollectionFormatAnnotationOnClass() throws Exception { | |
C c = new C().init(), c2; | |
String rdfXml, expected; | |
RdfSerializerBuilder s = RdfSerializer.create().xmlabbrev() | |
.set(RDF_rdfxml_tab, 3) | |
.sq() | |
.addRootProperty(); | |
RdfParser p = RdfXmlParser.DEFAULT; | |
//------------------------------------------------------------------------------------------------------------- | |
// Default on class is Bag - Should only affect DEFAULT properties. | |
//------------------------------------------------------------------------------------------------------------- | |
s.collectionFormat(RdfCollectionFormat.BAG); | |
expected = | |
"<rdf:RDF b='http://ns/' j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://test/b'>" | |
+ "\n <b:f2>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f2a</rdf:li>" | |
+ "\n <rdf:li>f2b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f2>" | |
+ "\n <b:f3>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f3a</rdf:li>" | |
+ "\n <rdf:li>f3b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f3>" | |
+ "\n <b:f4 parseType='Resource'>" | |
+ "\n <rdf:first>f4a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f4b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f4>" | |
+ "\n <b:f5>f5a</b:f5>" | |
+ "\n <b:f5>f5b</b:f5>" | |
+ "\n <b:f6>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f6a</rdf:li>" | |
+ "\n <rdf:li>f6b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f6>" | |
+ "\n <b:f7>" | |
+ "\n <rdf:Seq>" | |
+ "\n <rdf:li>f7a</rdf:li>" | |
+ "\n <rdf:li>f7b</rdf:li>" | |
+ "\n </rdf:Seq>" | |
+ "\n </b:f7>" | |
+ "\n <b:f8>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>f8a</rdf:li>" | |
+ "\n <rdf:li>f8b</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:f8>" | |
+ "\n <b:f9 parseType='Resource'>" | |
+ "\n <rdf:first>f9a</rdf:first>" | |
+ "\n <rdf:rest parseType='Resource'>" | |
+ "\n <rdf:first>f9b</rdf:first>" | |
+ "\n <rdf:rest resource='http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'/>" | |
+ "\n </rdf:rest>" | |
+ "\n </b:f9>" | |
+ "\n <b:fa>faa</b:fa>" | |
+ "\n <b:fa>fab</b:fa>" | |
+ "\n <b:fb>" | |
+ "\n <rdf:Bag>" | |
+ "\n <rdf:li>fba</rdf:li>" | |
+ "\n <rdf:li>fbb</rdf:li>" | |
+ "\n </rdf:Bag>" | |
+ "\n </b:fb>" | |
+ "\n <j:root>true</j:root>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
rdfXml = s.build().serialize(c); | |
assertXmlEquals(expected, rdfXml); | |
c2 = p.parse(rdfXml, C.class); | |
assertEqualObjects(c, c2, true); | |
} | |
@Rdf(collectionFormat=RdfCollectionFormat.BAG) | |
public static class C extends B { | |
@Override /* B */ | |
public C init() throws Exception { | |
f1 = new URI("http://test/b"); | |
f2 = new String[]{"f2a","f2b"}; | |
f3 = new String[]{"f3a","f3b"}; | |
f4 = new String[]{"f4a","f4b"}; | |
f5 = new String[]{"f5a","f5b"}; | |
f6 = new String[]{"f6a","f6b"}; | |
f7 = new BA().append("f7a","f7b"); | |
f8 = new BB().append("f8a","f8b"); | |
f9 = new BC().append("f9a","f9b"); | |
fa = new BD().append("faa","fab"); | |
fb = new BE().append("fba","fbb"); | |
return this; | |
} | |
} | |
@Test | |
public void testLooseCollectionsOfBeans() throws Exception { | |
WriterSerializer s = RdfSerializer.create().xmlabbrev().looseCollections().build(); | |
ReaderParser p = RdfParser.create().xml().looseCollections().build(); | |
String rdfXml, expected; | |
List<D> l = new LinkedList<>(); | |
l.add(new D().init(1)); | |
l.add(new D().init(2)); | |
rdfXml = s.serialize(l); | |
expected = | |
"<rdf:RDF j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://localhost/f1/2'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/2'/>" | |
+ "\n </rdf:Description>" | |
+ "\n <rdf:Description about='http://localhost/f1/1'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/1'/>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
assertXmlEquals(expected, rdfXml); | |
l = p.parse(rdfXml, LinkedList.class, D.class); | |
D[] da = l.toArray(new D[l.size()]); | |
rdfXml = s.serialize(da); | |
expected = | |
"<rdf:RDF j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://localhost/f1/2'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/2'/>" | |
+ "\n </rdf:Description>" | |
+ "\n <rdf:Description about='http://localhost/f1/1'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/1'/>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
assertXmlEquals(expected, rdfXml); | |
da = p.parse(rdfXml, D[].class); | |
rdfXml = s.serialize(da); | |
expected = | |
"<rdf:RDF j='http://www.apache.org/juneau/' jp='http://www.apache.org/juneaubp/' rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>" | |
+ "\n <rdf:Description about='http://localhost/f1/2'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/2'/>" | |
+ "\n </rdf:Description>" | |
+ "\n <rdf:Description about='http://localhost/f1/1'>" | |
+ "\n <jp:f2>f2</jp:f2>" | |
+ "\n <jp:f3 resource='http://localhost/f3/1'/>" | |
+ "\n </rdf:Description>" | |
+ "\n</rdf:RDF>"; | |
assertXmlEquals(expected, rdfXml); | |
} | |
public static class D { | |
@Rdf(beanUri=true) public URI f1; | |
public String f2; | |
public URI f3; | |
public D init(int num) throws Exception { | |
f1 = new URI("http://localhost/f1/" + num); | |
f2 = "f2"; | |
f3 = new URI("http://localhost/f3/" + num); | |
return this; | |
} | |
} | |
} |