← Back to team overview

dhis2-devs team mailing list archive

Re: Imporing orgunits through Web API with JSON

 

Yes it needs also the featureType attribute, but it didn't work with uppercase "POINT" (the coordinates could not be loaded), it had to be "Point". Just for completeness, the working version:

{
    "organisationUnits": [
        {
            "parent": {
                "id": "jbKhQuPUg8V"
            },
            "featureType": "Point",
            "name": "Babayu",
            "openingDate": "2015-10-15",
            "coordinates": "[35.703,-5.639]",
            "shortName": "Babayu"
        },
        {
            "parent": {
                "id": "jbKhQuPUg8V"
            },
            "featureType": "Point",
            "name": "Babayu",
            "openingDate": "2015-10-15",
            "coordinates": "[35.703,-5.639]",
            "shortName": "Babayu"
        }
    ]
}

On 12.10.2015 04:15, Morten Olav Hansen wrote:
Hi David

As Lars said, you should have the coordinates in a string, you can see the spec of GeoJSON at [1], basically what is inside OU.coordinates is the same as what is inside geometry.coordinates in GeoJSON.

You should also add "featureType": "POINT" (since you are adding a point), there is also POLYGON / MULTI_POLYGON if you are adding polygon(s).

[1] http://geojson.org/

--
Morten

On Fri, Oct 9, 2015 at 9:16 PM, David Huser <david.huser@xxxxxxxxxxxx <mailto:david.huser@xxxxxxxxxxxx>> wrote:

    I could make it work (json formatting errors) like below, maybe it
    helps others in the future.


    {
        "organisationUnits": [
        {
            "name": "Bahi RC",
            "shortName": "Bahi RC",
            "openingDate": "2015-10-01",
            "parent": {
                 "id": "jbKhQuPUg8V"
             },
            "level": 4,
            "coordinates": "[36.53,-6.54]"

        }
        ]
    }





    On 08.10.2015 15:11, David Huser wrote:
    /In reference to this question//
    //https://lists.launchpad.net/dhis2-devs/msg32117.html/

    I'd like to post multiple organization units (facilities) where
    the upper level already exists in the system (districts).

    My curl request:
    curl -d @all.json "http://localhost:8081/api/metaData";
    <http://localhost:8081/api/metaData> -X POST -H "Content-Type:
    application/json" -u admin:district

    My all.json looks like this, legit according to http://jsonlint.com/

    {
        "organisationUnits": [
            {
                "code": "100229-4",
                "coordinates": [
                    35.312,
                    -5.7452
                ],
                "level": "4",
                "name": "Bahi RC",
                "parent": [
                    {
                        "id": "jbKhQuPUg8V"
                    }
                ],
                "shortName": "Bahi RC"
            },
            {
                "code": "100231-0",
                "level": "4",
                "name": "Bakwata",
                "parent": [
                    {
                        "id": "PGqrKhQZ8AA"
                    }
                ],
                "shortName": "Bakwata"
            }
        ]
    }


    When I post to the api/metadata endpoint, I always get  the error
    below (the same as Jason in the referenced post). Has something
    of the Metadata import process / its standard changed since
    August 2014?
    If I post it to the api/organisationUnits endpoint, it says
    successful but imported/updated/ignored/deleted: all 0

    Thank you
    David



    08-Oct-2015 14:55:46.394 SEVERE [http-nio-8081-exec-5]
    org.apache.catalina.core.StandardWrapperValve.invoke
    Servlet.service() for servlet [webapi] in context with path []
    threw exception
     com.fasterxml.jackson.databind.JsonMappingException: *Can not
    deserialize instance of java.lang.String out of START_ARRAY token*
     at [Source:
    org.apache.catalina.connector.CoyoteInputStream@92c234; line: 1,
    column: 56] (through reference chain:
    org.hisp.dhis.dxf2.metadata.MetaData["organisationUnits"]->java.util.ArrayList[0]->org.hisp.dhis.organisationunit.OrganisationUnit["coordinates"])
        at
    com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
        at
    com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)
        at
    com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)
        at
    com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
        at
    com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
        at
    com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
        at
    com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap._findDeserializeAndSet2(BeanPropertyMap.java:313)
        at
    com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:291)
        at
    com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:335)
        at
    com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:142)
        at
    com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
        at
    com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
        at
    com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
        at
    com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
        at
    com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
        at
    com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
        at
    com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
        at
    com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
        at
    com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
        at
    com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2648)
        at
    org.hisp.dhis.dxf2.common.JacksonUtils.fromJson(JacksonUtils.java:154)
        at
    org.hisp.dhis.webapi.controller.MetaDataController.importJson(MetaDataController.java:249)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
    Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        at
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
        at
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
        at
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
        at
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
        at
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
        at
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
        at
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
        at
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
        at
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.hisp.dhis.security.filter.CorsFilter.doFilter(CorsFilter.java:93)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.hisp.dhis.security.filter.CustomAuthenticationFilter.doFilter(CustomAuthenticationFilter.java:64)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:140)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter(AutomaticAccessFilter.java:115)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:57)
        at
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
        at
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
        at
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at
    org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
        at
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
        at
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:82)
        at
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
        at
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        at
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
        at
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
        at
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
        at
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
        at
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
        at
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
        at
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
        at
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
    Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
    Source)
        at
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)


    _______________________________________________
    Mailing list:https://launchpad.net/~dhis2-devs
    <https://launchpad.net/%7Edhis2-devs>
    Post to     :dhis2-devs@xxxxxxxxxxxxxxxxxxx
    <mailto:dhis2-devs@xxxxxxxxxxxxxxxxxxx>
    Unsubscribe :https://launchpad.net/~dhis2-devs
    <https://launchpad.net/%7Edhis2-devs>
    More help   :https://help.launchpad.net/ListHelp

-- *David Huser*
    Informatics Specialist
    Swiss Centre for International Health
    Tel: +41 79 740 63 41 <tel:%2B41%2079%20740%2063%2041>
    Skype: dafhus
    david.huser@xxxxxxxxxxxx <http://david.huser@xxxxxxxxxxxx>

    *Swiss Tropical and Public Health Institute*
    Socinstrasse 57, P.O. Box
    4002 Basel, Switzerland
    www.swisstph.ch <http://www.swisstph.ch>

    _______________________________________________
    Mailing list: https://launchpad.net/~dhis2-devs
    <https://launchpad.net/%7Edhis2-devs>
    Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
    <mailto:dhis2-devs@xxxxxxxxxxxxxxxxxxx>
    Unsubscribe : https://launchpad.net/~dhis2-devs
    <https://launchpad.net/%7Edhis2-devs>
    More help   : https://help.launchpad.net/ListHelp



--
*David Huser*
Informatics Specialist
Swiss Centre for International Health
Tel: +41 79 740 63 41
Skype: dafhus
david.huser@xxxxxxxxxxxx

*Swiss Tropical and Public Health Institute*
Socinstrasse 57, P.O. Box
4002 Basel, Switzerland
www.swisstph.ch

References