Many thanks for the exact explanation. I've chosen the solution #2 (casting 
buildCause..material to Map<String, Object>) which subjectively seems more 
natural to me. With this the plugin is now working successfully for me,
воскресенье, 19 февраля 2023 г. в 16:01:39 UTC+7, Chad Wilson: 

> At least with the notification skeleton plugin the buildCause.material map 
> is not typed 
> <https://github.com/gocd-contrib/notification-skeleton-plugin/blob/master/src/main/java/com/example/notification/requests/StageStatusRequest.java#L69>,
>  
> so Java at compile time doesn't know what types of things are in it (will 
> assume Object --> Object), which is a problem as a statically typed 
> language.
>
> You'll need to cast to the types that exist at runtime - or use the 
> JSON-unmarshalling to try and do that, to turn a compile time problem into 
> a (potential) runtime problem. You could either try 
>
>    - updating your copy of 
>    
> https://github.com/gocd-contrib/notification-skeleton-plugin/blob/master/src/main/java/com/example/notification/requests/StageStatusRequest.java#L69
>  
>    to public Map<String, Map<String, Object>> material (and see if the 
>    unmarshalling from JSON to objects work fine - it may not though)
>    - if that doesn't work, and without going into Gson unmarshalling, as 
>    two steps like
>    Map<String, Object> gitConfig = (Map<String, Object>) 
>    request.pipeline.buildCause.get(0).material.get("git-configuration");
>    String gitUrl = (String) gitConfig.get("url");
>
>
> Might be good to keep in mind that if the trigger is not directly from a 
> git material, but is triggered by an upstream pipeline, the content of the 
> material will be different, and might be a material with 
> "pipeline-configuration" map or a different material type.
>
> -Chad
>
> On Sun, Feb 19, 2023 at 4:34 PM 'Alexey Savchkov' via go-cd <
> [email protected]> wrote:
>
>> I am trying to write a custom notification plugin based on 
>> https://github.com/gocd-contrib/notification-skeleton-plugin and I can't 
>> figure out how to get the repository URL from the StageStatusRequest 
>> request body. May I ask for a quick help?
>>
>> The URL is located here:
>>
>> {"pipeline":{"name":"notif-test","counter":"15","group":"My-group","build-cause":[{"material":{"git-configuration":{"shallow-clone":false,"branch":"main","url":"[email protected]:mygroup/dummy.git"}
>>  
>> ...
>>
>> The type of 
>> request.pipeline.buildCause.get(0).material.get("git-configuration") is 
>> com.google.gson.internal.LinkedTreeMap and when I output its contents in 
>> the log  it's
>>
>> {shallow-clone=false, branch=main, 
>> [email protected]:mygroup/dummy.git}
>>
>> but when I further try to get the URL string like this
>>
>> request.pipeline.buildCause.get(0).material.get("git-configuration").get("url")
>> the code doesn't compile with:
>>
>> /plugin/src/main/java/com/example/notification/executors/StageStatusRequestExecutor.java:71:
>>  
>> error: cannot find symbol
>> LOG.info(String.format("DEBUG in StageStatusRequestExecutor 
>> sendNotification url=%s", 
>> request.pipeline.buildCause.get(0).material.get("git-configuration").get("url")));
>>
>>   symbol:   method get(String)
>>   location: class Object
>>
>> (the error indicator ^ points to the dot next to get("url")). How could I 
>> get the URL value from the map? Do I have to pass something else as the key 
>> to get() ? Not a Java man so may be missiong something very basic here.
>>
>> Thanks a lot. 
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "go-cd" 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/go-cd/9ee4f486-ba2b-4da1-b20a-418e3d7bd1een%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/go-cd/9ee4f486-ba2b-4da1-b20a-418e3d7bd1een%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"go-cd" 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/go-cd/726ebebe-d9ae-4fd1-883f-8d21c3f47066n%40googlegroups.com.

Reply via email to