/*
# Licensed Materials - Property of IBM
# Copyright IBM Corp. 2016
*/
package com.ibm.streamsx.topology.test.api;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.junit.Test;
import com.ibm.streams.operator.types.ValueFactory;
import com.ibm.streams.operator.types.XML;
import com.ibm.streamsx.topology.TStream;
import com.ibm.streamsx.topology.Topology;
import com.ibm.streamsx.topology.function.Function;
import com.ibm.streamsx.topology.test.TestTopology;
@SuppressWarnings("serial")
public class XMLTupleTest extends TestTopology {
@Test
public void testConstant() throws Exception {
final Topology topology = newTopology();
String sdata = "<book><title>Dracula</title><author>Bram Stoker</author></book>";
byte[] data = sdata.getBytes(StandardCharsets.UTF_8);
XML xml = ValueFactory.newXML(new ByteArrayInputStream(data));
TStream<XML> source = topology.constants(Collections.singletonList(xml)).asType(XML.class);
assertNotNull(source);
assertEquals(XML.class, source.getTupleClass());
TStream<String> out = convertXMLToString(source);
completeAndValidate(out, 10, sdata);
}
private static TStream<String> convertXMLToString(TStream<XML> source) {
TStream<String> out = source.transform(new Function<XML,String>() {
@Override
public String apply(XML v) {
StreamSource ss = v.getStreamSource();
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
ByteArrayOutputStream out = new ByteArrayOutputStream();
transformer.transform(ss, new StreamResult(out));
return new String(out.toByteArray(), StandardCharsets.UTF_8);
} catch (Exception e) {
return null;
}
}});
return out;
}
}