diff --git a/impl/src/main/java/org/glassfish/json/JsonMessages.java b/impl/src/main/java/org/glassfish/json/JsonMessages.java
index fd954ac..219b507 100644
--- a/impl/src/main/java/org/glassfish/json/JsonMessages.java
+++ b/impl/src/main/java/org/glassfish/json/JsonMessages.java
@@ -257,6 +257,10 @@
         return localize("patch.member.missing", operation, member);
     }
 
+    static String PATCH_OPERATION_MISSING() {
+        return localize("patch.operation.missing");
+    }
+
 
     private static String localize(String key, Object ... args) {
         try {
diff --git a/impl/src/main/java/org/glassfish/json/JsonPatchImpl.java b/impl/src/main/java/org/glassfish/json/JsonPatchImpl.java
index 8537477..1f9352d 100644
--- a/impl/src/main/java/org/glassfish/json/JsonPatchImpl.java
+++ b/impl/src/main/java/org/glassfish/json/JsonPatchImpl.java
@@ -150,7 +150,11 @@
 
         JsonPointer pointer = getPointer(operation, "path");
         JsonPointer from;
-        switch (Operation.fromOperationName(operation.getString("op"))) {
+        JsonString op = operation.getJsonString("op");
+        if (op == null) {
+            throw new JsonException(JsonMessages.PATCH_OPERATION_MISSING());
+        }
+        switch (Operation.fromOperationName(op.getString())) {
             case ADD:
                 return pointer.add(target, getValue(operation));
             case REPLACE:
diff --git a/impl/src/main/resources/org/glassfish/json/messages.properties b/impl/src/main/resources/org/glassfish/json/messages.properties
index aa3ad16..bcc877f 100644
--- a/impl/src/main/resources/org/glassfish/json/messages.properties
+++ b/impl/src/main/resources/org/glassfish/json/messages.properties
@@ -87,3 +87,4 @@
 patch.test.failed=The JSON Patch operation ''test'' failed for path ''{0}'' and value ''{1}''
 patch.illegal.operation=Illegal value for the op member of the JSON Patch operation: ''{0}''
 patch.member.missing=The JSON Patch operation ''{0}'' must contain a ''{1}'' member
+patch.operation.missing=The JSON Patch must contain ''op'' member
diff --git a/impl/src/test/java/org/glassfish/json/tests/JsonPatchBugsTest.java b/impl/src/test/java/org/glassfish/json/tests/JsonPatchBugsTest.java
index afe1e87..5ba3b92 100644
--- a/impl/src/test/java/org/glassfish/json/tests/JsonPatchBugsTest.java
+++ b/impl/src/test/java/org/glassfish/json/tests/JsonPatchBugsTest.java
@@ -20,6 +20,11 @@
 import jakarta.json.JsonArray;
 import jakarta.json.JsonException;
 import jakarta.json.JsonPatch;
+import jakarta.json.JsonReader;
+import jakarta.json.JsonStructure;
+
+import java.io.StringReader;
+
 import org.junit.Test;
 
 /**
@@ -42,4 +47,33 @@
                 .build();
         JsonArray result = patch.apply(array);
     }
+
+    // https://github.com/eclipse-ee4j/jsonp/issues/181
+    @Test(expected = JsonException.class)
+    public void applyThrowsJsonException2() {
+        // JSON document to be patched
+        String targetDocument
+                = "{\n"
+                + "  \"firstName\": \"John\",\n"
+                + "  \"lastName\": \"Doe\"\n"
+                + "}";
+
+        // JSON Patch document
+        // Instead of "op", we have "op_", which is invalid
+        String patchDocument
+                = "[\n"
+                + "  { \"op_\": \"replace\", \"path\": \"/firstName\", \"value\": \"Jane\" }\n"
+                + "]";
+
+        try (JsonReader objectReader = Json.createReader(new StringReader(targetDocument));
+                JsonReader arrayReader = Json.createReader(new StringReader(patchDocument))) {
+
+            JsonStructure target = objectReader.read();
+            JsonPatch patch = Json.createPatch(arrayReader.readArray());
+
+            // Applies the patch
+            // It will throw a NullPointerException with no message
+            JsonStructure patched = patch.apply(target);
+        }
+    }
 }
