=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemController.java 2014-06-01 12:21:14 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemController.java 2014-06-01 13:38:55 +0000 @@ -47,7 +47,6 @@ import org.hisp.dhis.user.CurrentUserService; import org.hisp.dhis.webapi.utils.ContextUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; @@ -91,7 +90,7 @@ //-------------------------------------------------------------------------- @RequestMapping( value = { "/uid", "/id" }, method = RequestMethod.GET ) - public void getUid( @RequestParam( required = false, defaultValue = "1" ) Integer n, HttpServletResponse response ) + public @ResponseBody RootNode getUid( @RequestParam( required = false, defaultValue = "1" ) Integer n, HttpServletResponse response ) throws IOException, InvalidTypeException { if ( n > 10000 ) @@ -108,15 +107,14 @@ collectionNode.addNode( new SimpleNode( "code", CodeGenerator.generateCode() ) ); } - response.setContentType( MediaType.APPLICATION_JSON_VALUE ); - nodeService.serialize( rootNode, MediaType.APPLICATION_JSON_VALUE, response.getOutputStream() ); + return rootNode; } @RequestMapping( value = "/tasks/{category}", method = RequestMethod.GET, produces = { "*/*", "application/json" } ) public void getTaskJson( @PathVariable( "category" ) String category, @RequestParam( required = false ) String lastId, HttpServletResponse response ) throws IOException { - List notifications = new ArrayList(); + List notifications = new ArrayList<>(); if ( category != null ) { === added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/RootNodeMessageConverter.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/RootNodeMessageConverter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/utils/RootNodeMessageConverter.java 2014-06-01 13:38:55 +0000 @@ -0,0 +1,82 @@ +package org.hisp.dhis.webapi.utils; + +/* + * Copyright (c) 2004-2014, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + */ + +import org.hisp.dhis.node.NodeService; +import org.hisp.dhis.node.types.RootNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.MediaType; +import org.springframework.http.converter.AbstractHttpMessageConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; + +import java.io.IOException; + +/** + * @author Morten Olav Hansen + */ +public class RootNodeMessageConverter extends AbstractHttpMessageConverter +{ + @Autowired + private NodeService nodeService; + + public RootNodeMessageConverter( MediaType... supportedMediaTypes ) + { + super( supportedMediaTypes ); + } + + @Override + protected boolean supports( Class clazz ) + { + return RootNode.class.equals( clazz ); + } + + @Override + protected boolean canRead( MediaType mediaType ) + { + return false; + } + + @Override + protected RootNode readInternal( Class clazz, HttpInputMessage inputMessage ) throws IOException, HttpMessageNotReadableException + { + return null; + } + + @Override + protected void writeInternal( RootNode rootNode, HttpOutputMessage outputMessage ) throws IOException, HttpMessageNotWritableException + { + MediaType mediaType = outputMessage.getHeaders().getContentType(); + String contentType = String.format( "%s/%s", mediaType.getType(), mediaType.getSubtype() ); + + nodeService.serialize( rootNode, contentType, outputMessage.getBody() ); + } +} === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/servlet.xml' --- dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/servlet.xml 2014-05-22 12:40:24 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/resources/META-INF/dhis/servlet.xml 2014-06-01 13:38:55 +0000 @@ -13,8 +13,18 @@ + + + + application/json + application/xml + + + + +