diff --git a/dlls/webservices/tests/writer.c b/dlls/webservices/tests/writer.c
index 128e66e30a4..8888c695394 100644
--- a/dlls/webservices/tests/writer.c
+++ b/dlls/webservices/tests/writer.c
@@ -791,6 +791,21 @@ static void test_simple_struct_type(void)
ok( hr == S_OK, "got %08x\n", hr );
check_output( writer, "value", __LINE__ );
+ /* required value */
+ hr = set_output( writer );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsWriteStartElement( writer, NULL, &localname, &ns, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsWriteType( writer, WS_ELEMENT_CONTENT_TYPE_MAPPING, WS_STRUCT_TYPE, &s,
+ WS_WRITE_REQUIRED_VALUE, test, sizeof(*test), NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = WsWriteEndElement( writer, NULL );
+ ok( hr == S_OK, "got %08x\n", hr );
+ check_output( writer, "value", __LINE__ );
+
hr = set_output( writer );
ok( hr == S_OK, "got %08x\n", hr );
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 89f9465841f..8872a37b1f6 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -1695,9 +1695,7 @@ static HRESULT write_type( struct writer *writer, WS_TYPE_MAPPING mapping, WS_TY
case WS_STRUCT_TYPE:
{
const void *ptr;
-
- if (!desc || option == WS_WRITE_REQUIRED_VALUE) return E_INVALIDARG;
-
+ if (!desc) return E_INVALIDARG;
if (!option) option = WS_WRITE_REQUIRED_POINTER;
if ((hr = get_value_ptr( option, value, size, (const void **)&ptr )) != S_OK) return hr;
return write_type_struct( writer, mapping, desc, ptr );