Forum Discussion

Ksivagurunathan's avatar
Ksivagurunathan
Contributor
8 years ago

Custom EDI Parser snap output view not recognised by mapper snap

we developed a custom snap to parse EDI 835 data on Java. puzzle is how to map Java object on mapper snap. when we add a mapper snap next to EDI parser, Input schema on mapper is blank. But when I add a copy snap in between EDI Parser custom snap and mapper, am able to see the input schema in mapper.

5 Replies

  • dmiller's avatar
    dmiller
    Former Employee

    Did you ever figure out the issue?
    Bumping up if not since there were no comments yet.

  • robin's avatar
    robin
    Former Employee

    I helped out on this one. Yes, I believe the root cause was successfully identified.

    A custom object was being used directly as the Document data and hence this behavior was experienced.

    To ensure compatibility, an instance of SnapLogic’s Jackson ObjectMapper can be injected and then used to create a JSON-compatible version of your custom object:

    @Inject
    private ObjectMapper mapper;
    

    Instead of:

    outputViews.write(documentUtility.newDocument(edi835Message));
    

    do this:

    outputViews.write(documentUtility.newDocument(mapper.convertValue(edi835Messsage, Map.class));
    

    This ensures that the Document written to the output view contains a Map, which the Mapper will then be able to introspect and display in its input schema.

    • andrew_holbrook's avatar
      andrew_holbrook
      New Contributor III

      Thanks @dmiller and @robin for this! I was having a similar issue with some of my custom snaps.

      @robin what do you import at the top? Right now I’m importing from: org.codehaus.jackson.map.ObjectMapper

      Thanks!
      Andrew

      • robin's avatar
        robin
        Former Employee
        import com.fasterxml.jackson.databind.ObjectMapper;
        

        The org.codehaus.jackson-package version is from an older version of Jackson. The com.fasterxml.jackson-package version is the right one. See java - org.codehaus.jackson versus com.fasterxml.jackson.core - Stack Overflow for more.

        The implementation that is injected is SnapObjectMapper, which extends com.fasterxml.jackson.databind.ObjectMapper. It enables some Jackson serialization features by default, as well as some custom serializers for Dates/Times/DateTimes.