Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.
This repository was archived by the owner on Jan 7, 2023. It is now read-only.

Problem serializing generated subclass #120

@3thanZ

Description

@3thanZ

Hi,

I have a complex XSD that I reversed engineered into PHP classes and JMS YAML using this project. For simplicity, I am only focusing on the PHP class EmployerId which is a subclass of EmployerIdType.

The generated YAML for EmployerId is:

Api\Models\Dimona\EmployerId:
    xml_root_name: EmployerId

The generated YAML for EmployerIdType is:

Api\Models\Dimona\EmployerIdType:
    properties:
        nOSSRegistrationNbr:
            expose: true
            access_type: public_method
            serialized_name: NOSSRegistrationNbr
            accessor:
                getter: getNOSSRegistrationNbr
                setter: setNOSSRegistrationNbr
            type: Api\Models\Dimona\NOSSRegistrationNbr
        provisionalNSSONbr:
            expose: true
            access_type: public_method
            serialized_name: ProvisionalNSSONbr
            accessor:
                getter: getProvisionalNSSONbr
                setter: setProvisionalNSSONbr
            type: Api\Models\Dimona\ProvisionalNSSONbr
        nOSSLPARegistrationNbr:
            expose: true
            access_type: public_method
            serialized_name: NOSSLPARegistrationNbr
            accessor:
                getter: getNOSSLPARegistrationNbr
                setter: setNOSSLPARegistrationNbr
            type: Api\Models\Dimona\NOSSLPARegistrationNbr
        companyID:
            expose: true
            access_type: public_method
            serialized_name: CompanyID
            accessor:
                getter: getCompanyID
                setter: setCompanyID
            type: Api\Models\Dimona\CompanyID

When I try to serialize the EmployerId class using the code below (in my test.php):

<?php 
require_once 'vendor/autoload.php';

use Api\Models\Dimona\EmployerId;
use Api\Models\Dimona\NaturalPerson;
use Api\Models\Dimona\DimonaFeatures;
use Api\Configuration\Config;
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\Handler\HandlerRegistryInterface;
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler;
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;

$employerId = new EmployerId();
$employerId->setNOSSRegistrationNbr(123456789); 

$serializerBuilder = SerializerBuilder::create();
$serializerBuilder->addMetadataDir("lib/Models/Dimona/JMS", "Api\Models\Dimona");
$serializerBuilder->configureHandlers(function (HandlerRegistryInterface $handler) use ($serializerBuilder) {
    $serializerBuilder->addDefaultHandlers();
    $handler->registerSubscribingHandler(new BaseTypesHandler());
    $handler->registerSubscribingHandler(new XmlSchemaDateHandler());
});

$serializer = $serializerBuilder->build();

print($serializer->serialize($employerId, "xml"));
print("\r\n");

?>

I get the error:

slyc-mbp-001:test-dimona-serialization ethansiew$ php test.php 
PHP Fatal error:  Call to a member function value() on a non-object in /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php on line 90
PHP Stack trace:
PHP   1. {main}() /Users/ethansiew/git/test-dimona-serialization/test.php:0
PHP   2. JMS\Serializer\Serializer->serialize() /Users/ethansiew/git/test-dimona-serialization/test.php:27
PHP   3. PhpOption\Some->map() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:85
PHP   4. call_user_func:{/Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89}() /Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89
PHP   5. JMS\Serializer\Serializer->JMS\Serializer\{closure}() /Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89
PHP   6. JMS\Serializer\Serializer->visit() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:82
PHP   7. JMS\Serializer\GraphNavigator->accept() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:176
PHP   8. JMS\Serializer\XmlSerializationVisitor->visitProperty() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:235
PHP   9. JMS\Serializer\GraphNavigator->accept() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php:302
PHP  10. JMS\Serializer\XmlSerializationVisitor->visitProperty() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:235
PHP  11. JMS\Serializer\Metadata\PropertyMetadata->getValue() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php:225

Fatal error: Call to a member function value() on a non-object in /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Metadata/PropertyMetadata.php on line 90

Call Stack:
    0.0002     232088   1. {main}() /Users/ethansiew/git/test-dimona-serialization/test.php:0
    0.0147    2257488   2. JMS\Serializer\Serializer->serialize() /Users/ethansiew/git/test-dimona-serialization/test.php:27
    0.0156    2399976   3. PhpOption\Some->map() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:85
    0.0156    2400152   4. call_user_func:{/Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89}() /Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89
    0.0156    2400248   5. JMS\Serializer\Serializer->JMS\Serializer\{closure}() /Users/ethansiew/git/test-dimona-serialization/vendor/phpoption/phpoption/src/PhpOption/Some.php:89
    0.0156    2400464   6. JMS\Serializer\Serializer->visit() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:82
    0.0156    2403736   7. JMS\Serializer\GraphNavigator->accept() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/Serializer.php:176
    0.0252    2978144   8. JMS\Serializer\XmlSerializationVisitor->visitProperty() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:235
    0.0252    2979072   9. JMS\Serializer\GraphNavigator->accept() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php:302
    0.0271    2990352  10. JMS\Serializer\XmlSerializationVisitor->visitProperty() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:235
    0.0271    2990352  11. JMS\Serializer\Metadata\PropertyMetadata->getValue() /Users/ethansiew/git/test-dimona-serialization/vendor/jms/serializer/src/JMS/Serializer/XmlSerializationVisitor.php:225

I've attached the sample project.
test-dimona-serialization.zip

Any advise is greatly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions