下面列出了怎么用javax.xml.transform.sax.SAXTransformerFactory的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Performs identity transformation.
*/
public static <T extends Result>
T identityTransform(Source src, T result) throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory.get()).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.get().newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
/**
* Performs identity transformation.
*/
public static <T extends Result>
T identityTransform(Source src, T result) throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory.get()).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.get().newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
public SchemaToXML(Schema schema, StreamResult streamResult)
{
final SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance();
try
{
xmlOut = stf.newTransformerHandler();
}
catch (TransformerConfigurationException error)
{
throw new RuntimeException("Unable to create TransformerHandler.", error);
}
final Transformer t = xmlOut.getTransformer();
try
{
t.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");
}
catch (final IllegalArgumentException e)
{
// It was worth a try
}
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.ENCODING, SchemaComparator.CHAR_SET);
xmlOut.setResult(streamResult);
this.schema = schema;
}
/**
* Performs identity transformation.
*/
public static <T extends Result>
T identityTransform(Source src, T result) throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory.get()).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.get().newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
/**
* Performs identity transformation.
* @param <T>
* @param src
* @param result
* @return
* @throws javax.xml.transform.TransformerException
* @throws java.io.IOException
* @throws org.xml.sax.SAXException
* @throws javax.xml.parsers.ParserConfigurationException
*/
public static <T extends Result> T identityTransform(Source src, T result)
throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory.get()).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.get().newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
/**
* Performs identity transformation.
*/
public static <T extends Result>
T identityTransform(Source src, T result) throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
/**
* Test newTransformerHandler with a Template Handler along with a relative
* URI in the style-sheet file.
*
* @throws Exception If any errors occur.
*/
@Test
public void testcase09() throws Exception {
String outputFile = USER_DIR + "saxtf009.out";
String goldFile = GOLDEN_DIR + "saxtf009GF.out";
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
XMLReader reader = XMLReaderFactory.createXMLReader();
SAXTransformerFactory saxTFactory
= (SAXTransformerFactory)TransformerFactory.newInstance();
TemplatesHandler thandler = saxTFactory.newTemplatesHandler();
thandler.setSystemId("file:///" + XML_DIR);
reader.setContentHandler(thandler);
reader.parse(XSLT_INCL_FILE);
TransformerHandler tfhandler=
saxTFactory.newTransformerHandler(thandler.getTemplates());
Result result = new StreamResult(fos);
tfhandler.setResult(result);
reader.setContentHandler(tfhandler);
reader.parse(XML_FILE);
}
assertTrue(compareWithGold(goldFile, outputFile));
}
private void load(final Source source, final String localCacheKey, final Map<String, Object> attributes) {
LOG.debug("{} local cache miss: {}", getClass().getSimpleName(), localCacheKey);
// XSLT has to be parsed
final SAXTransformerFactory transformerFactory;
if (attributes == null || attributes.isEmpty()) {
transformerFactory = TRAX_FACTORY;
} else {
transformerFactory = createNewSAXTransformerFactory();
attributes.forEach(transformerFactory::setAttribute);
}
try {
this.templates = transformerFactory.newTemplates(source);
} catch (TransformerConfigurationException e) {
throw new SetupException("Impossible to read XSLT from '" + source + "', see nested exception", e);
}
}
@Test
public void testSAXTransformerFactory() throws TransformerConfigurationException {
final String xsl = "<?xml version='1.0'?>\n" + "<xsl:stylesheet" + " xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" + " version='1.0'>\n"
+ " <xsl:template match='/'>Hello World!</xsl:template>\n" + "</xsl:stylesheet>\n";
ReaderStub.used = false;
TransformerFactory transFactory = TransformerFactory.newInstance();
assertTrue(transFactory.getFeature(SAXTransformerFactory.FEATURE));
InputSource in = new InputSource(new StringReader(xsl));
SAXSource source = new SAXSource(in);
transFactory.newTransformer(source);
assertTrue(ReaderStub.used);
}
@Override
protected TransformerHandler getTransformerHandler(String xslFileName) throws SAXException, ParserConfigurationException,
TransformerConfigurationException, IOException {
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();
factory.setURIResolver(uriResolver);
TemplatesHandler templatesHandler = factory.newTemplatesHandler();
SAXParserFactory pFactory = SAXParserFactory.newInstance();
pFactory.setNamespaceAware(true);
XMLReader xmlreader = pFactory.newSAXParser().getXMLReader();
// create the stylesheet input source
InputSource xslSrc = new InputSource(xslFileName);
xslSrc.setSystemId(filenameToURL(xslFileName));
// hook up the templates handler as the xsl content handler
xmlreader.setContentHandler(templatesHandler);
// call parse on the xsl input source
xmlreader.parse(xslSrc);
// extract the Templates object created from the xsl input source
return factory.newTransformerHandler(templatesHandler.getTemplates());
}
/**
* Performs identity transformation.
*/
public static <T extends Result>
T identityTransform(Source src, T result) throws TransformerException, SAXException, ParserConfigurationException, IOException {
if (src instanceof StreamSource) {
// work around a bug in JAXP in JDK6u4 and earlier where the namespace processing
// is not turned on by default
StreamSource ssrc = (StreamSource) src;
TransformerHandler th = ((SAXTransformerFactory) transformerFactory.get()).newTransformerHandler();
th.setResult(result);
XMLReader reader = saxParserFactory.get().newSAXParser().getXMLReader();
reader.setContentHandler(th);
reader.setProperty(LEXICAL_HANDLER_PROPERTY, th);
reader.parse(toInputSource(ssrc));
} else {
newTransformer().transform(src, result);
}
return result;
}
public XalanTransformerFactory() {
final SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance(
"org.apache.xalan.xsltc.trax.TransformerFactoryImpl",
Thread.currentThread().getContextClassLoader());
try {
factory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
} catch (TransformerException e) {
LOGGER.warn("Unsupported TransformerFactory feature " + javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING);
}
this.delegate = factory;
}
/**
* Creates a new identity transformer.
*/
static Transformer createTransformer(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformer();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
SAXTransformerFactory newTransformerFactory() {
SAXTransformerFactory tf
= (SAXTransformerFactory)TransformerFactory.newInstance();
if(!tf.getFeature(SAXSource.FEATURE)) {
throw new IllegalStateException(
"SAX transformer factory does not support SAXSource");
}
if(!tf.getFeature(SAXResult.FEATURE)) {
throw new IllegalStateException(
"SAX transformer factory does not support SAXResult");
}
return tf;
}
AnnotationParserImpl(boolean disableSecureProcessing) {
try {
SAXTransformerFactory factory = stf.get();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, disableSecureProcessing);
transformer = factory.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
public static SAXTransformerFactory getSAXTransformFactory(boolean overrideDefaultParser) {
SAXTransformerFactory tf = overrideDefaultParser
? (SAXTransformerFactory) SAXTransformerFactory.newInstance()
: (SAXTransformerFactory) new TransformerFactoryImpl();
try {
tf.setFeature(OVERRIDE_PARSER, overrideDefaultParser);
} catch (TransformerConfigurationException ex) {
// ignore since it'd never happen with the JDK impl.
}
return tf;
}
/**
* Creates a new identity transformer.
*/
static Transformer createTransformer(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformer();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
/**
* Creates a new identity transformer.
*/
public static TransformerHandler createTransformerHandler(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
AnnotationParserImpl(boolean disableSecureProcessing) {
try {
SAXTransformerFactory factory = stf.get();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, disableSecureProcessing);
transformer = factory.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
public static void main(String[] args) throws TransformerConfigurationException {
SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
//todo 修复方式
// sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
// sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Payloads.NO_FEEDBACK_SINGLE_LINE
.getBytes());
StreamSource source = new StreamSource(byteArrayInputStream);
sf.newTransformerHandler(source);
}
public void test() throws Exception {
ClassReader cr = new ClassReader(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SAXTransformerFactory saxtf = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler handler = saxtf.newTransformerHandler();
handler.setResult(new SAXResult(new ASMContentHandler(bos, false)));
handler.startDocument();
cr.accept(new SAXClassAdapter(handler, false), false);
handler.endDocument();
assertEquals(cr, new ClassReader(bos.toByteArray()));
}
/**
* Creates a new identity transformer.
*/
static Transformer createTransformer(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformer();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
/**
* Creates a new identity transformer.
*/
public static TransformerHandler createTransformerHandler(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
AnnotationParserImpl(boolean disableSecureProcessing) {
try {
SAXTransformerFactory factory = stf.get();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, disableSecureProcessing);
transformer = factory.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
public static SAXTransformerFactory getSAXTransformFactory(boolean overrideDefaultParser) {
SAXTransformerFactory tf = overrideDefaultParser
? (SAXTransformerFactory) SAXTransformerFactory.newInstance()
: (SAXTransformerFactory) new TransformerFactoryImpl();
try {
tf.setFeature(OVERRIDE_PARSER, overrideDefaultParser);
} catch (TransformerConfigurationException ex) {
// ignore since it'd never happen with the JDK impl.
}
return tf;
}
public static CharSequence formatXml(String xml) {
try {
Transformer serializer = SAXTransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Source xmlSource = new SAXSource(new InputSource(new ByteArrayInputStream(xml.getBytes())));
StreamResult res = new StreamResult(new ByteArrayOutputStream());
serializer.transform(xmlSource, res);
return new String(((ByteArrayOutputStream) res.getOutputStream()).toByteArray());
} catch (Exception e) {
Logger.e("non xml content", e);
return xml;
}
}
@Before
public void setUp()
{
final SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance();
try
{
xmlOut = stf.newTransformerHandler();
}
catch (TransformerConfigurationException error)
{
throw new RuntimeException("Unable to create TransformerHandler.", error);
}
final Transformer t = xmlOut.getTransformer();
try
{
t.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");
}
catch (final IllegalArgumentException e)
{
// It was worth a try
}
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.STANDALONE, "no");
writer = new StringWriter();
xmlOut.setResult(new StreamResult(writer));
transformer = new DbObjectXMLTransformer(xmlOut);
}
public TransformerHandler getTransformerHandler() throws TransformerConfigurationException {
TransformerHandler handler = ((SAXTransformerFactory)tFactory).newTransformerHandler(templates);
Transformer transformer = handler.getTransformer();
transformer.setErrorListener(new TransformerErrorListener());
// Set URIResolver on transformer for Xalan. Setting it on the factory
// doesn't work for Xalan. See
// https://www.oxygenxml.com/archives/xsl-list/200306/msg00021.html
transformer.setURIResolver(classLoaderURIResolver);
return handler;
}
/**
* Creates a new identity transformer.
*/
public static TransformerHandler createTransformerHandler(boolean disableSecureProcessing) {
try {
SAXTransformerFactory tf = (SAXTransformerFactory)XmlFactory.createTransformerFactory(disableSecureProcessing);
return tf.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new Error(e); // impossible
}
}
private XCalWriter(Writer writer, Node parent, Map<String, String> outputProperties) {
this.writer = writer;
if (parent instanceof Document) {
Node root = parent.getFirstChild();
if (root != null) {
parent = root;
}
}
this.icalendarElementExists = isICalendarElement(parent);
try {
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();
handler = factory.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new RuntimeException(e);
}
Transformer transformer = handler.getTransformer();
/*
* Using Transformer#setOutputProperties(Properties) doesn't work for
* some reason for setting the number of indentation spaces.
*/
for (Map.Entry<String, String> entry : outputProperties.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
transformer.setOutputProperty(key, value);
}
Result result = (writer == null) ? new DOMResult(parent) : new StreamResult(writer);
handler.setResult(result);
}