FYI I configured CircleCI for this plugin, so now it's possible to download
the latest *.hpi *automated* build from there:

i.e. Build #7:
https://circleci.com/gh/bsideup/jenkins-pipeline-view/7#artifacts

On Tue, Mar 22, 2016 at 8:59 AM Michael Neale <[email protected]> wrote:

> In another case it looks like Execution, yes... never mind (should be easy
> to fix once identified). I think the jackson stuff just happened to pick
> that edge case up (I thought I saw a serialization problem and my brain
> suddenly turned off looking for null pointers! hahaha.
>
> Nice work!
>
>
> On Tuesday, March 22, 2016 at 5:49:49 PM UTC+11, Sergei Egorov wrote:
>
>> Actually... getStartNode marked with @Nonnull, as well as getExecution(),
>> so one of them is null. Execution maybe?
>>
>> On Tue, Mar 22, 2016 at 8:17 AM Sergei Egorov <[email protected]> wrote:
>>
> Hi Michael,
>>>
>>> Wow, interesting finding!
>>>
>>> I checked with the sources and looks like it's not an issue of the
>>> plugin itself, but StepEndNode. Jackson in plugin configured to serialize
>>> only pre-configured fields/methods, and any new object in the domain will
>>> not affect it.
>>>
>>> What I see here is that StepEndNode::getTypeDisplayName throws an NPE.
>>> From StepEndNode's source code, I see that there are no checks for
>>> getStartNode() result, and for some reason it's null. This is a good place
>>> to start if you want to figure out what's wrong in your setup (even better
>>> if you can put conditional breakpoint on getTypeDisplayName and
>>> "getStartNode() == null", because I see (in code) that it might be null,
>>> but getTypeDisplayName is not null-safe.
>>>
>>> On Tue, Mar 22, 2016 at 8:00 AM Michael Neale <[email protected]>
>>> wrote:
>>>
>> As luck would have it, I notice this is tripped by by having global lib
>>>> variables added in (basically, DSLs). Is there a JIRA project for this?
>>>>
>>>> (not a huge thing, I can't imagine many would run into this, but it
>>>> looks like it gets upset if not all the things are serializable).
>>>>
>>>> Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was
>>>> java.lang.NullPointerException) (through reference chain:
>>>> org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode["typeDisplayName"])
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:141)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3559)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2909)
>>>>
>>>> at
>>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi.doNodes(PipelineViewApi.java:75)
>>>>
>>>> ... 89 more
>>>>
>>>> Caused by: java.lang.IllegalArgumentException: (was
>>>> java.lang.NullPointerException) (through reference chain:
>>>> org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode["typeDisplayName"])
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3459)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3378)
>>>>
>>>> at
>>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi$2.apply(PipelineViewApi.java:78)
>>>>
>>>> at
>>>> com.github.bsideup.jenkins.pipeline.ui.view.PipelineViewApi$2.apply(PipelineViewApi.java:75)
>>>>
>>>> at com.google.common.collect.Iterators$8.next(Iterators.java:812)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serializeContents(IterableSerializer.java:89)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serialize(IterableSerializer.java:74)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ser.std.IterableSerializer.serialize(IterableSerializer.java:12)
>>>>
>>>> at
>>>> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)
>>>>
>>>> ... 92 more
>>>>
>>>> On Tuesday, March 22, 2016 at 10:49:54 AM UTC+11, Michael Neale wrote:
>>>>>
>>>>> Very cool, and I like the use of react!
>>>>>
>>>>> On Monday, March 21, 2016 at 5:52:04 PM UTC+11, Sergei Egorov wrote:
>>>>>>
>>>>>> Hey everyone,
>>>>>>
>>>>>> Yesterday I decided to publish sources for my pipeline visualization
>>>>>> plugin: https://github.com/bsideup/jenkins-pipeline-view
>>>>>>
>>>>>> <https://lh3.googleusercontent.com/-t28IjO2m73U/Vu-VVrauoEI/AAAAAAAAAyI/tiF8TH7YVCYiqI4n78DvC0FQ21ir46LNg/s1600/screenshot.png>
>>>>>>
>>>>>>
>>>>>> What's cool about it?
>>>>>> First of all, it *can handle any graph* provided by pipeline because
>>>>>> it uses very powerful *JS graph library* to position steps.
>>>>>> Also, it's a *React* application, written in *ES7* (not even ES6!),
>>>>>> with ImmutableJS and RxJS inside - so hipsters will be happy :D But in
>>>>>> fact, it means that it's damn easy to develop this plugin and provide 
>>>>>> more
>>>>>> functionality.
>>>>>> I use *Webpack* to bundle everything (JS, CSS, fonts, images, SVG
>>>>>> icons) in one single pipe.js file. *No Jenkins JS Modules*, no
>>>>>> conflicts, no impact on others. Even CSS will not conflict because of
>>>>>> *CSS-modules* ( http://glenmaddern.com/articles/css-modules )
>>>>>> All icons are SVG ones and look good on any screen, retina or not,
>>>>>> and any zoom level.
>>>>>>
>>>>>> I use Jackson on the backend side to serialize FlowNodes and their
>>>>>> actions. *Why Jackson?* Because it was much easier to implement
>>>>>> serialization of selected (non-exposed) fields and class info included
>>>>>> compared to Stapler. I saw something were done about classinfo in 
>>>>>> Stapler,
>>>>>> but at the moment of creation of this plugin, it wasn't delivered to
>>>>>> Jenkins core yet. Also, *almost none of the Pipeline actions are
>>>>>> @Expose-d*.
>>>>>>
>>>>>> I use *gradle-jpi-plugin* instead of Maven because it's much easier
>>>>>> to describe some complex build process with Gradle, especially when
>>>>>> frontend build is involved. In fact, it's just one line:
>>>>>>
>>>>>> https://github.com/bsideup/jenkins-pipeline-view/blob/954b895b6574cdf34815ff94a4a8db3ad3811aeb/build.gradle#L61
>>>>>>
>>>>>>
>>>>>> Future development
>>>>>> Will I continue to develop it? Definitely! Here, *at ZeroTurnaround*,
>>>>>> we use Jenkins a lot, and eventually we will migrate to the pipelines, 
>>>>>> and
>>>>>> proper visualization of the process is a must for us. And feel free to
>>>>>> contribute as well, it's really a good chance to learn *modern JS
>>>>>> stack* as well :)
>>>>>>
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>> Sergei Egorov
>>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Jenkins Developers" group.
>>>>
>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>
>>>
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/jenkinsci-dev/0697c884-91ad-4716-809e-3c40cf5e35da%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/jenkinsci-dev/0697c884-91ad-4716-809e-3c40cf5e35da%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "Jenkins Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jenkinsci-dev/70fea7d1-fb89-4500-802b-9e7ec2cb3fb1%40googlegroups.com
> <https://groups.google.com/d/msgid/jenkinsci-dev/70fea7d1-fb89-4500-802b-9e7ec2cb3fb1%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/CAAJdKXkBYD5eHF7QADriquFjtZYBnh8h8Rz0Nc5yQA5jgCNHoA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to