package org.genedb.crawl.view; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.apache.log4j.Logger; import org.genedb.crawl.model.XMLResponseWrapper; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.web.servlet.View; public class XMLView extends BaseView implements View{ private static final Logger logger = Logger.getLogger(XMLView.class); private String contentType = "application/xml"; private JAXBContext jaxbContext; @Override public String getContentType() { return contentType; } public void setJaxbContext(JAXBContext jaxbContext) throws JAXBException { this.jaxbContext = jaxbContext; } @Override public void render(Map<String, ?> map, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType(contentType); logger.debug(String.format("rendering %s", contentType)); XMLResponseWrapper wrapper = new XMLResponseWrapper(); if (showParameters) { wrapper.setParameters (request.getParameterMap()); } for (Entry<String, ?> entry : map.entrySet()) { logger.debug(entry.getKey()); //logger.debug(entry.getValue()); Object value = entry.getValue(); if (value instanceof BeanPropertyBindingResult) { continue; } if (value instanceof List) { wrapper.results = (List) value; } else { wrapper.results = new ArrayList<Object>(); wrapper.results.add(value); } } Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.marshal(wrapper, response.getWriter()); } }