diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 58adab43b5d..f12776291b6 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1381,7 +1381,7 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval * } } return 1; - } else if (strict && model->u.element->nillable) { + } else if (strict && model->u.element->nillable && model->min_occurs > 0) { property = xmlNewNode(NULL,model->u.element->name); xmlAddChild(node, property); if (style == SOAP_ENCODED) { @@ -1390,6 +1390,12 @@ static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval * xmlNsPtr xsi = encode_add_ns(property,XSI_NAMESPACE); xmlSetNsProp(property, xsi, "nil", "true"); } + if (style == SOAP_LITERAL && + model->u.element->namens && + model->u.element->form == XSD_FORM_QUALIFIED) { + xmlNsPtr nsp = encode_add_ns(property, model->u.element->namens); + xmlSetNs(property, nsp); + } return 1; } else if (model->min_occurs == 0) { return 2;