[ 
https://issues.apache.org/jira/browse/AVRO-1635?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16571131#comment-16571131
 ] 

ASF GitHub Bot commented on AVRO-1635:
--------------------------------------

wmatthews-google commented on issue #301: AVRO-1635 C++ schema aware encoders 
throw tr1::bad_weak_ptr exception for recursive schema
URL: https://github.com/apache/avro/pull/301#issuecomment-410938744
 
 
   Hi! I wanted to follow up on this. I'd be happy to restructure the code if 
that'd help get this in. Please let me know!

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> C++ schema aware encoders throw tr1::bad_weak_ptr exception for recursive 
> schema
> --------------------------------------------------------------------------------
>
>                 Key: AVRO-1635
>                 URL: https://issues.apache.org/jira/browse/AVRO-1635
>             Project: Avro
>          Issue Type: Bug
>          Components: c++
>    Affects Versions: 1.7.7
>         Environment: Ubuntu 12.04, gcc 4.6.4
>            Reporter: Heye Vöcking
>            Priority: Major
>              Labels: avro, c++, encode, recursive, schema
>
> Encoding an object with a recursive schema fails when using a jsonEncoder or 
> a validatingEncoder. Here is an example:
> Output:
> {noformat}
> terminate called after throwing an instance of 
> 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr>
>  >'
>   what():  tr1::bad_weak_ptr
> {noformat}
> {code:title=container.json|borderStyle=solid}
> {
>   "name": "Container",
>   "doc": "Container to demonstrate the weak_ptr exception.",
>   "type": "record",
>   "fields": [{
>     "name": "field",
>     "type": {
>       "name": "Object",
>       "type": "record",
>       "fields": [{
>         "name": "value",
>         "type": [
>           "string",
>           {"type": "map", "values": "Object"}
>         ]
>       }]
>     }
>   }]
> }
> {code}
> {code:title=example.cc|borderStyle=solid}
> #include <fstream>
> #include <avro/Compiler.hh>
> #include <avro/Encoder.hh>
> #include <avro/Stream.hh>
> #include <avro/ValidSchema.hh>
> #include "container.hh"
> int
> main()
> {
>     std::ifstream ifs("container.json");
>     avro::ValidSchema schema;
>     avro::compileJsonSchema(ifs, schema);
>     std::auto_ptr<avro::OutputStream> out = avro::memoryOutputStream();
>     // Either one fails, here we use the jsonEncoder
>     // avro::EncoderPtr encoder = avro::jsonEncoder(schema);
>     avro::EncoderPtr encoder = avro::validatingEncoder(schema, 
> avro::binaryEncoder());
>     
>     // An encoder that doesn't know the schema works fine
>     // avro::EncoderPtr encoder = avro::binaryEncoder();
>     encoder->init(*out);
>     Container container;
>     std::map<std::string, Object > object;
>     // Note that it doesn't fail if we don't insert a value into the map
>     object["a"].value.set_string("x");
>     container.field.value.set_map(object);
>     avro::encode(*encoder, container);
>     return 0;
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to