/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2014 */ package com.ibm.streamsx.inet.rest.servlets; import java.io.IOException; import java.io.InputStream; import java.util.Map; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ibm.streams.operator.StreamingData; import com.ibm.streams.operator.types.XML; /** * Returns an XML attribute as application/xml * */ public class AccessXMLAttribute extends HttpServlet { /** * */ private static final long serialVersionUID = 2612945204950914891L; private final StreamingData port; private Map<Integer, Object[]> portData; private long lastModified = System.currentTimeMillis(); public AccessXMLAttribute(StreamingData port) { this.port = port; } @SuppressWarnings("unchecked") @Override public void init(ServletConfig config) throws ServletException { super.init(config); portData = (Map<Integer, Object[]>) config.getServletContext().getAttribute("operator.conduit"); } public long getLastModified() { return lastModified; } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("application/xml"); ServletOutputStream out = response.getOutputStream(); Object[] data = portData.get(port.getPortNumber()); if (data == null) { response.setStatus(HttpServletResponse.SC_NO_CONTENT); } else { XML xdata = (XML) data[0]; lastModified = (Long) data[1]; if (xdata.isDefaultValue()) { response.setStatus(HttpServletResponse.SC_NO_CONTENT); } else { response.setStatus(HttpServletResponse.SC_OK); InputStream datai = xdata.getInputStream(); int r; while ((r = datai.read()) != -1) { out.write(r); } datai.close(); } } out.flush(); out.close(); } }