2013-03-07 2 views
0

Мне нужно передать вывод нескольких преобразований XSL в объект FopFactory, но я не могу понять, как это кодировать. У меня работает труба, но последний шаг - загадка.Вывод цепочки Saxon XsltTransformer в FOP

DOMResult xmlRequest = new DOMResult(); 
marshaller.marshal(req,xmlRequest); 

FopFactory fopFactory = FopFactory.newInstance(); 
FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); 

XdmNode source = processor.newDocumentBuilder() 
    .build(new DOMSource(xmlRequest.getNode())); 

XsltTransformer step1 = templateCache.get("foo1.xsl").load(); 
XsltTransformer step2 = templateCache.get("foo2.xsl").load(); 
XsltTransformer step3 = templateCache.get("foo3_fo.xsl").load(); 

step1.setInitialContextNode(source); 
step1.setDestination(step2); 
step2.setDestination(step3); 

// Here's what I really need to do -- pipe the output of step3 into the FO processor. 
// Of course, the following statement doesn't work, but I don't know what I need 
// to do to make the output of step3 piped into the fop, so the 
step3.setDestination(fop.getDefaultHandler()); 

step1.transform(); 

// at this point, the results of the FOP processor would be in the 
// ByteArrayOutputStream "out". 

Как это сделать?

ответ

0

Конечно, после размещения вопроса и проведения большего поиска я нашел ответ. Вот что я придумал (не упоминая большую часть кода сверху):

Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); 
SAXDestination fopDest = new SAXDestination(fop.getDefaultHandler()); 
. 
step2.setDestination(step3); 
step3.setDestination(fopDest); 

step1.transform(); 
. 
// Output is now in ByteArrayOutputStream out;