php / php/php-src

ext-soap + unbounded elements + classmap + 1 element

Abierto
#11,705 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Bug Extension: soap Status: Needs Triage
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.1k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

Description

The WSDL for this class:

<xsd:complexType name="resLFAType">
    <xsd:sequence>
        <xsd:element name="resInfo"	type="tns:resInfoType"></xsd:element>
        <xsd:element name="resLFAsucces" type="tns:LFAsuccesType" minOccurs="0" maxOccurs="unbounded"></xsd:element>
        <xsd:element name="resLFAerror" type="tns:LFAerrorType" minOccurs="0" maxOccurs="unbounded"></xsd:element>
    </xsd:sequence>
</xsd:complexType>
    

while using this SOAP classmap:


    protected static array $classMap = [
        'resInfoType' => ResInfoType::class,

        'resLFAType' => ResLFAType::class,

        'LFAsuccesType' => LFASuccessType::class,
        'LFAerrorType' => LFAErrorType::class,
    ];

while having this for ResLFAType:

<?php

class ResLFAType
{
    public ?ResInfoType $resInfo;

    /**
     * @var LFASuccessType[]
     */
    public array $resLFAsucces = [];
    /**
     * @var LFAErrorType[]
     */
    public array $resLFAerror = [];
}

When the SOAP service is responding with multiple resLFAsucces and/or resLFAerror, everything works fine

BUT when the SOAP service is responding with exactly one of resLFAsucces, then i get this Exception:

Cannot assign LFASuccessType to property ResLFAType::$resLFAsucces of type array

it seems to understand when getting multiple entries to assign them correctly to the property,
but it fails when only getting one object.

PHP Version

PHP 8.2.6

Operating System

No response

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el fallo utilizando el WSDL, el PHP classmap, la definición de ResLFAType y una respuesta proporcionados que contenga exactamente un elemento resLFAsucces. Sigue la ruta de deserialización de ext-soap para elementos unbounded y compara el tratamiento de un singleton con el de varios elementos. El trabajo estará terminado cuando una única respuesta rellene el array tipado sin la excepción de asignación y una prueba de regresión cubra el caso.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
php
Área
api
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.