ant elder wrote:
Does anyone know how to get XML from the Tuscany model objects thats
nicely formatted?
As a quick hack I came up with this but it seems like theres probably
something better and I'm not sure that
org.apache.xml.serialize.OutputFormat and
org.apache.xml.serialize.XMLSerializer are going to be there by default
in all runtimes:
I did something very similar in org.apache.tuscany.sca.itest.builder.TestUtils.
Simon
public class PrettyPrintTestCase {
@Test
public void testReadWriteComposite() throws Exception {
DefaultExtensionPointRegistry extensionPointRegistry = new
DefaultExtensionPointRegistry();
Composite model = new DefaultAssemblyFactory().createComposite();
model.setName(new QName("myNs","myName"));
model.setLocal(true);
model.setAutowire(false);
model.getIncludes().add(model);
String xml = modelToXML(model, true, extensionPointRegistry);
System.out.println(xml);
}
/**
* Helper method to get the XML string for a model object.
*/
public static String modelToXML(Base model, boolean pretty,
ExtensionPointRegistry extensionPointRegistry) {
try {
StAXHelper stAXHelper =
StAXHelper.getInstance(extensionPointRegistry);
StAXArtifactProcessorExtensionPoint staxProcessors =
extensionPointRegistry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
ExtensibleStAXArtifactProcessor staxProcessor = new
ExtensibleStAXArtifactProcessor(staxProcessors, null,
stAXHelper.getOutputFactory());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
staxProcessor.write(model, bos, new
ProcessorContext(extensionPointRegistry));
bos.close();
if (!pretty) {
return bos.toString();
}
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document document = parser.parse(new
ByteArrayInputStream(bos.toByteArray()));
bos = new ByteArrayOutputStream();
OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(2);
XMLSerializer serializer = new XMLSerializer(bos, format);
serializer.serialize(document);
return bos.toString();
} catch (ContributionWriteException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ParserConfigurationException e) {
throw new RuntimeException(e);
} catch (SAXException e) {
throw new RuntimeException(e);
}
}
}
...ant