blob: 55f3e9c8a059f5c7378aba4b4d3d928aa2c8b5d4 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.internal.oxm;
import org.eclipse.persistence.internal.oxm.record.ExtendedContentHandler;
import org.eclipse.persistence.internal.oxm.record.MarshalRecord;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
/**
* INTERNAL:
* <p><b>Purpose</b>: This class is used to tranfer SAX events to a TopLink OXM
* Marshal Record. Used by XMLFragment mappings to write peices of XML to a
* marshal record.</p>
*/
public class MarshalRecordContentHandler implements ExtendedContentHandler {
protected MarshalRecord marshalRecord;
protected NamespaceResolver resolver;
public MarshalRecordContentHandler(MarshalRecord record, NamespaceResolver resolver) {
marshalRecord = record;
this.resolver = resolver;
}
public void setMarshalRecord(MarshalRecord record) {
this.marshalRecord = record;
}
public MarshalRecord getMarshalRecord() {
return marshalRecord;
}
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
XPathFragment frag = new XPathFragment(qName);
marshalRecord.openStartElement(frag, resolver);
for (int i = 0; i < atts.getLength(); i++) {
marshalRecord.attribute(atts.getURI(i), atts.getLocalName(i), atts.getQName(i), atts.getValue(i));
}
marshalRecord.closeStartElement();
}
@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
XPathFragment frag = new XPathFragment(qName);
marshalRecord.endElement(frag, resolver);
}
@Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
marshalRecord.startPrefixMapping(prefix, uri);
}
@Override
public void processingInstruction(String target, String data) throws SAXException {
//refContentHandler.processingInstruction(target, data);
}
@Override
public void setDocumentLocator(Locator locator) {
//refContentHandler.setDocumentLocator(locator);
}
@Override
public void startDocument() throws SAXException {
//do nothing. startDocument() on the content handler is not triggered when fragment on XMLMarshaller is true
}
@Override
public void endDocument() throws SAXException {
//do nothing. startDocument() on the content handler is not triggered when fragment on XMLMarshaller is true
}
@Override
public void skippedEntity(String name) throws SAXException {
//refContentHandler.skippedEntity(name);
}
@Override
public void endPrefixMapping(String prefix) throws SAXException {
marshalRecord.endPrefixMapping(prefix);
}
@Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
//refContentHandler.ignorableWhitespace(ch, start, length);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String characters = new String(ch, start, length);
characters(characters);
}
@Override
public void characters(CharSequence charSequence) throws SAXException {
String characters = charSequence.toString();
if (characters.trim().length() > 0) {
marshalRecord.characters(characters);
}
}
@Override
public void setNil(boolean isNil) {}
}