Fix JSON parser NPE

This commit is contained in:
James 2014-07-03 18:35:23 -04:00
parent ca0929df07
commit 80c13494a8
5 changed files with 35 additions and 6 deletions

View File

@ -126,7 +126,7 @@ public class StringDt extends BasePrimitive<String> implements IQueryParameterTy
*/
@Override
public boolean isEmpty() {
return super.isEmpty() && StringUtils.isBlank(getValue());
return super.isBaseEmpty() && StringUtils.isBlank(getValue());
}
@Override

View File

@ -971,9 +971,10 @@ public class JsonParser extends BaseParser implements IParser {
theEventWriter.writeStartObject();
theEventWriter.write("url", ext.getUrl().getValue());
if (value == null && ext.getAllUndeclaredExtensions().isEmpty()) {
boolean noValue = value == null || value.isEmpty();
if (noValue && ext.getAllUndeclaredExtensions().isEmpty()) {
ourLog.debug("Extension with URL[{}] has no value", ext.getUrl().getValue());
} else if (value == null) {
} else if (noValue) {
theEventWriter.writeStartArray("extension");
for (ExtensionDt next : ext.getUndeclaredExtensions()) {
writeUndeclaredExt(theResDef, theResource, theEventWriter, next);

View File

@ -558,7 +558,7 @@ public class RestfulServer extends HttpServlet {
statusCode=((BaseServerResponseException) e).getStatusCode();
issue.getDetails().setValue(e.getMessage());
} else {
ourLog.error("Failure during REST processing: {}"+ e.toString(), e);
ourLog.error("Failure during REST processing", e);
issue.getDetails().setValue(e.toString() + "\n\n" + ExceptionUtils.getStackTrace(e));
}

View File

@ -0,0 +1,16 @@
package ca.uhn.fhir.model.primitive;
import static org.junit.Assert.*;
import org.junit.Test;
public class StringDtTest {
@Test
public void testBlank() {
assertTrue(new StringDt("").isEmpty());
}
}

View File

@ -68,12 +68,24 @@ public class JsonParserTest {
@Test
public void testEncodingNullExtension() {
Patient p = new Patient();
p.addUndeclaredExtension(new ExtensionDt(false, "http://foo#bar"));
String str = new FhirContext().newJsonParser().encodeResourceToString(p);
ExtensionDt extension = new ExtensionDt(false, "http://foo#bar");
p.addUndeclaredExtension(extension);
String str = ourCtx.newJsonParser().encodeResourceToString(p);
assertEquals("{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://foo#bar\"}]}", str);
extension.setValue(new StringDt());
str = ourCtx.newJsonParser().encodeResourceToString(p);
assertEquals("{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://foo#bar\"}]}", str);
extension.setValue(new StringDt(""));
str = ourCtx.newJsonParser().encodeResourceToString(p);
assertEquals("{\"resourceType\":\"Patient\",\"extension\":[{\"url\":\"http://foo#bar\"}]}", str);
}
@Test
public void testEncodeBinaryResource() {