This repository was archived by the owner on Jan 7, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 61
This repository was archived by the owner on Jan 7, 2023. It is now read-only.
Problem serializing generated subclass #120
Copy link
Copy link
Open
Description
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
Labels
No labels