Fixed NPE for adapters returning null.

Signed-off-by: Roman Grigoriadi <roman.grigoriadi@oracle.com>
diff --git a/src/main/java/org/eclipse/yasson/internal/model/PropertyModel.java b/src/main/java/org/eclipse/yasson/internal/model/PropertyModel.java
index 53d195d..043df6b 100644
--- a/src/main/java/org/eclipse/yasson/internal/model/PropertyModel.java
+++ b/src/main/java/org/eclipse/yasson/internal/model/PropertyModel.java
@@ -17,9 +17,14 @@
 import org.eclipse.yasson.internal.ReflectionUtils;
 import org.eclipse.yasson.internal.components.AdapterBinding;
 import org.eclipse.yasson.internal.components.SerializerBinding;
-import org.eclipse.yasson.internal.serializer.*;
 import org.eclipse.yasson.internal.model.customization.PropertyCustomization;
 import org.eclipse.yasson.internal.model.customization.PropertyCustomizationBuilder;
+import org.eclipse.yasson.internal.serializer.AdaptedObjectSerializer;
+import org.eclipse.yasson.internal.serializer.DefaultSerializers;
+import org.eclipse.yasson.internal.serializer.JsonbDateFormatter;
+import org.eclipse.yasson.internal.serializer.JsonbNumberFormatter;
+import org.eclipse.yasson.internal.serializer.SerializerProviderWrapper;
+import org.eclipse.yasson.internal.serializer.UserSerializerSerializer;
 
 import javax.json.bind.config.PropertyNamingStrategy;
 import javax.json.bind.serializer.JsonbSerializer;
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/AdaptedObjectSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/AdaptedObjectSerializer.java
index 96ce82a..17ee746 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/AdaptedObjectSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/AdaptedObjectSerializer.java
@@ -59,6 +59,10 @@
             if (context.addProcessedObject(obj)) {
                 final JsonbAdapter<T, A> adapter = (JsonbAdapter<T, A>) adapterInfo.getAdapter();
                 A adapted = adapter.adaptToJson(obj);
+                if (adapted == null) {
+                    generator.writeNull();
+                    return;
+                }
                 final JsonbSerializer<A> serializer = resolveSerializer((Marshaller) ctx, adapted);
                 serializer.serialize(adapted, generator, ctx);
             } else {
diff --git a/src/test/java/org/eclipse/yasson/adapters/AdaptersTest.java b/src/test/java/org/eclipse/yasson/adapters/AdaptersTest.java
index 41b763c..17676ad 100644
--- a/src/test/java/org/eclipse/yasson/adapters/AdaptersTest.java
+++ b/src/test/java/org/eclipse/yasson/adapters/AdaptersTest.java
@@ -24,8 +24,10 @@
 import org.eclipse.yasson.adapters.model.GenericBox;
 import org.eclipse.yasson.adapters.model.IntegerListToStringAdapter;
 import org.eclipse.yasson.adapters.model.JsonObjectPojo;
+import org.eclipse.yasson.adapters.model.ReturnNullAdapter;
 import org.eclipse.yasson.adapters.model.SupertypeAdapterPojo;
 import org.eclipse.yasson.adapters.model.UUIDContainer;
+import org.eclipse.yasson.defaultmapping.generics.model.ScalarValueWrapper;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -33,6 +35,7 @@
 import javax.json.bind.JsonbBuilder;
 import javax.json.bind.JsonbConfig;
 import javax.json.bind.adapter.JsonbAdapter;
+import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -437,6 +440,22 @@
     }
 
     @Test
+    public void testAdapterReturningNull() {
+        Jsonb jsonb = JsonbBuilder.create(new JsonbConfig().withAdapters(new ReturnNullAdapter()).withNullValues(true));
+
+        ScalarValueWrapper<Number> wrapper = new ScalarValueWrapper<>();
+        wrapper.setValue(10);
+        Type type = new TestTypeToken<ScalarValueWrapper<Number>>() {
+        }.getType();
+        String json = jsonb.toJson(wrapper, type);
+
+        Assert.assertEquals("{\"value\":null}", json);
+
+        ScalarValueWrapper<Number> result = jsonb.fromJson("{\"value\":null}", type);
+        Assert.assertNull(result.getValue());
+    }
+
+    @Test
     public void testAdaptUUID() {
         jsonb = JsonbBuilder.create();
         UUIDContainer pojo = new UUIDContainer();
diff --git a/src/test/java/org/eclipse/yasson/adapters/model/ReturnNullAdapter.java b/src/test/java/org/eclipse/yasson/adapters/model/ReturnNullAdapter.java
new file mode 100644
index 0000000..60e9056
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/adapters/model/ReturnNullAdapter.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ ******************************************************************************/
+package org.eclipse.yasson.adapters.model;
+
+import javax.json.bind.adapter.JsonbAdapter;
+
+public class ReturnNullAdapter implements JsonbAdapter<Number, String> {
+    @Override
+    public String adaptToJson(Number obj) throws Exception {
+        return null;
+    }
+
+    @Override
+    public Number adaptFromJson(String obj) throws Exception {
+        return null;
+    }
+}
diff --git a/src/test/java/org/eclipse/yasson/customization/JsonbNillableTest.java b/src/test/java/org/eclipse/yasson/customization/JsonbNillableTest.java
index c0b52b9..5e3c187 100644
--- a/src/test/java/org/eclipse/yasson/customization/JsonbNillableTest.java
+++ b/src/test/java/org/eclipse/yasson/customization/JsonbNillableTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -13,7 +13,11 @@
 
 package org.eclipse.yasson.customization;
 
-import org.eclipse.yasson.customization.model.*;
+import org.eclipse.yasson.customization.model.JsonbNillableClassSecondLevel;
+import org.eclipse.yasson.customization.model.JsonbNillableOverriddenWithJsonbProperty;
+import org.eclipse.yasson.customization.model.JsonbNillableOverridesClass;
+import org.eclipse.yasson.customization.model.JsonbNillableOverridesInterface;
+import org.eclipse.yasson.customization.model.JsonbNillableValue;
 import org.eclipse.yasson.customization.model.packagelevelannotations.JsonbNillablePackageLevel;
 import org.eclipse.yasson.customization.model.packagelevelannotations.PackageLevelOverriddenWithClassLevel;
 import org.eclipse.yasson.defaultmapping.generics.model.ScalarValueWrapper;