Validating
001 package org.gxml.book.parsing;
002
003 import java.io.InputStream;
004 import java.net.URI;
005
006 import javax.xml.namespace.QName;
007
008 import org.gxml.book.common.SampleApp;
009 import org.gxml.sa.GxApplication;
010 import org.gxml.sa.GxAtomBridge;
011 import org.gxml.sa.GxModel;
012 import org.gxml.sa.GxNameBridge;
013 import org.gxml.sa.GxProcessingContext;
014 import org.gxml.xdm.Resolved;
015 import org.gxml.xdm.Resolver;
016 import org.gxml.xs.SmComponentBag;
017 import org.gxml.xs.SmExceptionCatcher;
018 import org.gxml.xs.SmMetaLoadArgs;
019 import org.gxml.xs.SmName;
020
021 import com.tibco.gxml.sa.common.helpers.DocumentBuilderFactory;
022 import com.tibco.gxml.sa.common.helpers.GxDocumentBuilder;
023 import com.tibco.gxml.sa.common.helpers.GxDocumentBuilderFactory;
024 import com.tibco.gxml.sa.common.helpers.SmAtomBridgeOnGxAtomBridgeAdapter;
025 import com.tibco.gxml.xs.W3cXmlSchemaParser;
026
027 public abstract class BookValidatingParsingSample<I, U, N extends I, A extends I, S, T, X>
extends SampleApp<I, U, N, A, S, T, X>
028 {
029 public void testValidatingParse() throws Exception
030 {
031 final GxApplication<I, U, N, A, S, T, X> app = this;
032
033 final Resolver resolver = app.getResolver();
034
035 final SmMetaLoadArgs args = new SmMetaLoadArgs();
036
037 final SmExceptionCatcher errors = new SmExceptionCatcher();
038
039 final GxProcessingContext<I, U, N, A, S, T, X> pcx = app.newProcessingContext();
040
041 final Resolved<InputStream> resource = getResolver().resolveInputStream(new URI
("email.xsd"));
042
043 final W3cXmlSchemaParser<A, S> parser = new W3cXmlSchemaParser<A, S>
(new SmAtomBridgeOnGxAtomBridgeAdapter<A, S>(pcx.getAtomBridge()));
044
045 final SmComponentBag<A, S> components = parser.parse(resource.getLocation(),
resource.getResource(), resource.getSystemId(), errors, args, pcx);
046
047 pcx.register(components);
048
049 pcx.lock();
050
051 final GxNameBridge<S> nameBridge = pcx.getNameBridge();
052
053 assertEquals(0, errors.size());
054
055 final URI xmlURI = new URI("email.xml");
056 final Resolved<InputStream> xmlInput = resolver.resolveInputStream(xmlURI);
057
058 final GxDocumentBuilderFactory<N, S> factory =
new DocumentBuilderFactory<I, U, N, A, S, T, X>(pcx);
059
060 // Enable validation of the XML input.
061 factory.setValidating(true, nameBridge.name(new QName("http://www.example.com",
"email")));
062
063 final GxDocumentBuilder<N> builder = factory.newDocumentBuilder();
064
065 // TODO: Need to catch errors...
066 // builder.setExceptionHandler(errors);
067
068 final N doc = builder.parse(xmlInput.getResource(), xmlInput.getSystemId());
069
070 assertEquals(0, errors.size());
071
072 // System.out.println(serialize(doc, pcx));
073
074 final GxModel<N, A, S, T> model = pcx.getModel();
075 final GxAtomBridge<A, S> atomBridge = pcx.getAtomBridge();
076
077 final N email = model.getFirstChildElement(doc);
078 final S namespaceURI = nameBridge.symbolize("http://www.example.com");
079 final N sent = model.getFirstChildElementByName(email, namespaceURI,
nameBridge.symbolize("sent"));
080 assertNotNull("model.getFirstChildElementByName", sent);
081 final SmName<S> typeName = model.getTypeName(sent);
082 assertNotNull("model.getTypeName", typeName);
083 assertEquals("dateTime", typeName.toQName().getLocalPart());
084 final A dateTime = model.getTypedValue(sent).get(0);
085
086 // assertTrue(metaBridge.sameAs(metaBridge.handle(pcx.getTypeDefinition(type)),
087 // metaBridge.getType(SmNativeType.DATETIME)));
088
089 assertEquals("2008-03-23T14:49:30-05:00", atomBridge.getC14NForm(dateTime));
090 }
091 }
Copyright © Cloud Software Group, Inc. All rights reserved.
