org.openmrs.module.webservices.rest.web.response.ConversionException: patient on class org.openmrs.Encounter

I am trying to create a drug order. In order to do that I am creating Encouter first. I have put a patient in encouter. I try to create an encouter it throws a null pointer exception.

{“error”:{“message”:"[patient on class org.openmrs.Encounter]",“code”:“org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource:740”,“detail”:“org.openmrs.module.webservices.rest.web.response.ConversionException: patient on class org.openmrs.Encounter\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.setProperty(BaseDelegatingResource.java:740)\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.setConvertedProperties(BaseDelegatingResource.java:607)\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.DelegatingCrudResource.convert(DelegatingCrudResource.java:103)\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.DelegatingCrudResource.create(DelegatingCrudResource.java:76)\r\n\tat org.openmrs.module.webservices.rest.web.v1_0.controller.MainResourceController.create(MainResourceController.java:92)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\r\n\tat java.lang.reflect.Method.invoke(Unknown Source)\r\n\tat org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177)\r\n\tat org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)\r\n\tat org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.module.web.filter.ForcePasswordChangeFilter.doFilter(ForcePasswordChangeFilter.java:60)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:72)\r\n\tat org.openmrs.web.filter.GZIPFilter.doFilterInternal(GZIPFilter.java:64)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n\tat org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70)\r\n\tat org.openmrs.module.webservices.rest.web.filter.AuthorizationFilter.doFilter(AuthorizationFilter.java:104)\r\n\tat org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70)\r\n\tat org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:82)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n\tat org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70)\r\n\tat org.openmrs.module.owa.filter.OwaFilter.doFilter(OwaFilter.java:64)\r\n\tat org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:70)\r\n\tat org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:54)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:108)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:105)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)\r\n\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1368)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.lang.Thread.run(Unknown Source)\r\nCaused by: org.openmrs.module.webservices.rest.web.response.ConversionException: person on class org.openmrs.Patient\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.setProperty(BaseDelegatingResource.java:740)\r\n\tat org.openmrs.module.webservices.rest.web.ConversionUtil.convertMap(ConversionUtil.java:323)\r\n\tat org.openmrs.module.webservices.rest.web.ConversionUtil.convert(ConversionUtil.java:273)\r\n\tat org.openmrs.module.webservices.rest.web.ConversionUtil.convert(ConversionUtil.java:154)\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.setProperty(BaseDelegatingResource.java:735)\r\n\t… 78 more\r\nCaused by: java.lang.NullPointerException\r\n\tat org.openmrs.module.webservices.rest.web.ConversionUtil.convertMap(ConversionUtil.java:305)\r\n\tat org.openmrs.module.webservices.rest.web.ConversionUtil.convert(ConversionUtil.java:273)\r\n\tat org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.setProperty(BaseDelegatingResource.java:726)\r\n\t… 82 more\r\n”}}

When asking for help with REST, please share the full details of the call you are making, including the method, URL, and body content.

-Darius (by phone)

1 Like

I am trying to create a drug order in 2 steps. First I am trying to save encounter and in next step I would save drug. When I try to save encounter I get above error.

URL: http://localhost:8080/openmrs/ws/rest/v1/encounter Method: POST Body Content:

{ “encounterDatetime”: “2017-05-20T09:46:21.974+0100”, “patient”: { “uuid”: “6d80de73-c52e-4d01-934a-25636b6229f6”, “display”: “10000X - akhond shetu yusuf”, “identifiers”: [{ “uuid”: “4a33f16e-a2a0-4a85-bf14-234e0b2bcbbb”, “display”: “OpenMRS ID = 10000X”, “identifierType”: { “uuid”: “05a29f94-c0ed-11e2-94be-8c13b969e334”, “display”: “OpenMRS ID” }, “identifier”: “10000X”, “location”: { “uuid”: “2131aff8-2e2a-480a-b7ab-4ac53250262b”, “display”: “Isolation Ward” }, “preferred”: true } ], “person”: { “uuid”: “6d80de73-c52e-4d01-934a-25636b6229f6”, “display”: “akhond shetu yusuf”, “names”: [{ “uuid”: “1c86b8b8-3632-43ba-8989-c1fd4787eeff”, “givenName”: “akhond”, “middleName”: “shetu”, “familyName”: “yusuf”, “preferred”: false, “display”: “akhond shetu yusuf” } ], “gender”: “M”, “birthdate”: “1980-08-21T00:00:00.000+0100”, “birthdateEstimated”: false, “addresses”: [{ “preferred”: true, “address1”: “4 Lorne House”, “cityVillage”: “London”, “stateProvince”: “Greater London”, “country”: “United Kingdom”, “postalCode”: “e1 4QQ” } ], “attributes”: [{ “attributeType”: { “uuid”: “14d4f066-15f5-102d-96e4-000c29c2a5d7”, “display”: “Telephone Number” }, “value”: “07732486549” } ], “preferredName”: { “uuid”: “1c86b8b8-3632-43ba-8989-c1fd4787eeff”, “givenName”: “akhond”, “middleName”: “shetu”, “familyName”: “yusuf”, “preferred”: false, “display”: “akhond shetu yusuf” }, “preferredAddress”: { “preferred”: true, “address1”: “4 Lorne House”, “cityVillage”: “London”, “stateProvince”: “Greater London”, “country”: “United Kingdom”, “postalCode”: “e1 4QQ” }, “age”: 36 }, “voided”: false, “resourceVersion”: “1.8” }, “encounterType”: { “uuid”: “1cf4ae96-2458-45a3-be00-4c7a6b3b4adc”, “display”: “Drug Order” }, “visit”: { “uuid”: “c0183400-e77c-4d60-8dd4-177645372dd8”, “display”: “Facility Visit @ Amani Hospital - 18/05/2017 15:39” }, “encounterProviders”: [], “location”: { “uuid”: “7fdfa2cb-bc95-405a-88c6-32b7673c0453”, “display”: “Laboratory”, “name”: “Laboratory” }, “orders”: [], “obs”: [] }

The REST API does not consistently support posting default/full representations as properties of the thing you want to create.

To be safe, try replacing all those object (e.g. patient, encounterType, visit, location) with just their uuid.

(I think this may have been partially but not completely fixed since I wrote this in 2015, and you can see how some old code I wrote uses just UUIDs instead of the full objects here and here.)

Thanks a lot Darius. Your hints solved my problem.I can save encounter now.

In order to update only one order out of few orders in an encounter can I do:

“openmrs/ws/rest/v1/encounter/{parent-uuid}/orders/{uuid}” and pass order Json (I tried, it says unknown resource)

For example Original DrugOrder = 1 Tablet Four Times Update = 2 Tablet Four times.