Gradle - Cannot set property on null object - gradle

I have a .gradle in which I want to set some project properties if a condition is true.
def isRelease = project.getProperty('isRelease')
if (isRelease) {
println 'Detected a release'
project.properties.'releaseCenter'.'uploadURL' = project.properties.'uatUploadURL'
}
The output is:
A problem occurred evaluating root project 'tasks'.
> Cannot set property 'uploadURL' on null object
I think it has to do with the '' around the object name but I couldn't get it to work.
Any help is much appreciated.

You call project.properties: https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#getProperties--
which returns a Map. You then call properties.'releaseCenter' which is equivalent to doing properties.get("releaseCenter") which returns null. You try to get a property on a null object which is exactly the error you are seeing.
Possible solutions:
Fix your Gradle configuration (some plugin may be adding this property)
Define the property yourself.

Related

SpringBoot property value inside annotation

I have this annotation
#Listener(topics = "test")
that I want to relace with
#Listener(topics = "#Value(\"${topics}\")")
but I have this error
Could not resolve placeholder 'topics' in value "#Value("${topics}")"
Try:
#Listener(topics = "${topics}")
and make sure the property actually exists.
(Not a 100% sure that it works, but somewhat confident ;) )

Checking that Gradle system properties have been set

The Question
How do I check to see if a System property has been properly set from within a build.gradle file?
The Situation
I have a gradle.properties file in my root directory that looks something like this:
systemProp.user=exampleUsername
systemProp.password=examplePassword
I would like to validate the existence of these properties, something like:
if (!System.hasProperty('user')) {
throw new InvalidUserDataException("No user found in `gradle.properties`; please set one.")
}
Some Code
I've tried the following:
project.hasProperty('user') returns false
System.properties.get('user') returns exampleUsername
System.hasProperty('user') returns null
System.properties.get('user') == true returns true for non-falsey
values
You can use System.properties.containsKey('your_property') for your purpose. It returns true if a property with the provided key exists, false otherwise. An implementation of this could look like the following:
if (!System.properties.containsKey('user')) {
throw new InvalidUserDataException("No user found in `gradle.properties`; please set one.")
}

chef attributes value not getting parsed in another attribute

I am setting attributes in default.rb as
default[:my_app] = {
:vol => "data02",
:commitlog => "/foo/bar/node[:vol]/commitlog",
}
But :vol value is not getting parsed in commitlog attribute and I am getting following error.
mError executing action `create` on resource 'directory[/foo/bar/node[:vol]/comitlog]'[0m
You're missing the String interpolation syntax, e.g. y = "The value of X is #{X}." You probably want:
default[:my_app] = {
:vol => "data02",
:commitlog => "/foo/bar/#{node[:vol]}/commitlog",
}
Also, keep in mind that if you make one attribute depend on the value of another, you might override node[:my_app][:vol] later and expect the value of node[:my_app][:commitlog] to change with it, and it may not. The attributes will be parsed together, potentially before your override affects the first one.
Even after I am using the interpolation syntax, and when I am using node[:my_app][:commitlog] in recipe it shows /foo/bar//commitlog

"Invalid use of Null" when using Str() with a Null Recordset field, but Str(Null) works fine

I'm banging my head against the wall on this one. I was looking at some old database reporting code written in VB6 and came across this line (the code is moving data from a "source" database into a reporting database):
rsTarget!VehYear = Trim(Str(rsSource!VehYear))
When rsSource!VehYear is Null, the above line generates an "Invalid use of Null" run-time error. If I break on the above line and type the following in the Immediate pane:
?rsSource!VehYear
It outputs Null. Fine, that makes sense. Next, I try to reproduce the error:
?Str(rsSource!VehYear)
I get an "Invalid use of Null" error.
However, if I type the following into the Immediate window:
?Str(Null)
I don't get an error. It simply outputs Null.
If I repeat the same experiment with Trim() instead of Str(), everything works fine. ?Trim(rsSource!VehYear) returns Null, as does ?Trim(Null). No run-time errors.
So, my question is, how can Str(rsSource!VehYear) possibly throw an "Invalid use of Null" error when Str(Null) does not, when I know that rsSource!VehYear is equal to Null?
Update: If I type the following in the Immediate window, it works as expected (no error occurs):
?Str(rsSource!VehYear.Value)
This outputs Null. Now, I know that rsSource!VehYear is actually an ADODB.Field instance, but Value is its default property, so Str should be operating on the Value property (which is Null). Even the error message ("Invalid use of Null") suggests that Str is receiving a Null parameter, but how can it treat Null differently in one case and not the other?
My only guess is the internal implementation of Str() is somehow failing to get the default property, and the "Invalid use of Null" error is happening for a different reason (something other than the parameter is causing the "Invalid use of Null", perhaps when it is trying to retrieve the default property from the Field object).
Does anyone have a more detailed, technical explanation for what is actually happening here?
In short:
?Str(rsSource!VehYear)
throws an "Invalid use of Null" error when rsSource!VehYear is Null, but
?Str(rsSource!VehYear.Value)
returns Null.
However, both Trim(rsSource!VehYear) and Trim(rsSource!VehYear.Value) return Null.
If you need a value other than a string, try using IsNull instead:
rsTarget!VehYear = IIf(IsNull(rsSource!VehYear), 0, rsSource!VehYear)
' Note 0 is the default value
The Str function will specifically check if a Null value is passed in and deal with it accordingly. When you pass in an object it attempts to convert the result of a default method to a String. The result of the default method is not passed into the Str method, but Field object is, so a check for the initial Null will fail. The Str function will continue to check the parameter type for datatypes that it supports when it realizes that it has an object, it will attempt to retrieve the default value. It doesn't re-attempt to deal with the default value as it did with the passed in argument, so the attempt to return a Null as a String will fail. It seems MS didn't expect a default value to be Null or any other invalid value for Str. For instance Str doesn't support an empty string either.
This was my workaround in the vb6-days:
rsTarget!VehYear = Trim(Str(rsSource!VehYear & ""))
the & "" will make sure there is allways at least an empty string to work with.
From memory, null database fields are Nothing (or possibly vbNull), which do not have the same rules applied to them as Null. You should just be able to do a quick check:
If (rsSource!VehYear Is Nothing) Then
' Null
Else
' Not null
End If

Object variable not set error in vb6

Private m_IncidentDateRange As New MCWebServiceCOMWrapper.DateRange
Public Property Get IncidentDateRange() As MCWebServiceCOMWrapper.DateRange
IncidentDateRange = m_IncidentDateRange
End Property
Public Property Let IncidentDateRange(ByRef vNewValue As MCWebServiceCOMWrapper.DateRange)
Set m_IncidentDateRange = vNewValue
End Property
Error comes up in Get method please help
I would check the documentation for the MCWebServiceCOMWrapper.DateRange object and see if you are required to initialized it with values before you can use it. (maybe set a beginning and end date).
Don't you need to use "Set" there?

Resources