es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

groovy.lang.MissingMethodException: No hay una firma de método para: httpRequest() que sea aplicable para los tipos de argumentos: (java.util.LinkedHashMap)

Tengo el siguiente fragmento de código que solía funcionar muy bien en un pipeline. Tengo que moverlo a una biblioteca compartida en Jenkins, así que creé una clase para ello y hice los ajustes necesarios.

    def toJson (input) {
       return groovy.json.JsonOutput.toJson(input)
    }
def void callAPI (args) {
    def apiRequestBody = [
        "prop1": args.param1,
        "prop2": args.param2
    ]

// Construir la solicitud – tenga en cuenta que la autenticación debe ocurrir de forma transparente usando las credenciales de Jenkins
response = httpRequest (authentication: “${CREDENCIALES_GUARDADAS_EN_JENKINS}”,
consoleLogResponseBody: true,
httpMode: ‘POST’,
requestBody: toJson(apiRequestBody),
url: “${URL_API}”,
customHeaders: [
[
name: ‘Content-Type’,
value: ‘application/json; charset=utf-8’
],
[
name: ‘Accept-Charset’,
value: ‘utf-8’
]
]
)

Cuando llamo al método callAPI (args), obtengo el siguiente error:

Excepción groovy.lang.MissingMethodException: No hay una firma del método: MY_PACKAGE_PATH.MY_CLASS.httpRequest() es aplicable para los tipos de argumentos: (java.util.LinkedHashMap) valores: [[authentication:MI_API_UID_PW, consoleLogResponseBody:true, …]]

¿Qué me falta?

Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error que estás recibiendo indica que el método httpRequest no se encuentra en tu clase de biblioteca compartida. Esto probablemente se deba a que el método httpRequest no forma parte de las bibliotecas Groovy por defecto, y por lo tanto necesita ser importado o referenciado en tu clase.

    Para solucionar este problema, deberás importar el método httpRequest desde el complemento HTTP de Jenkins Pipeline. Puedes hacer esto añadiendo la siguiente declaración de importación en la parte superior de tu clase:

    import jenkins.plugins.http_request.HttpRequest
    

    Luego, en el método callAPI, reemplaza el método httpRequest por HttpRequest. Tu método actualizado debería lucir algo así:

    def void callAPI (args) {
        def apiRequestBody = [
            "prop1": args.param1,
            "prop2": args.param2
        ]
    
        // Construye la solicitud - observa que la autenticación debería ocurrir de forma transparente utilizando las credenciales de Jenkins
        response = HttpRequest.httpRequest authentication: "${CREDENTIALS_STORED_IN_JENKINS}",
            consoleLogResponseBody: true,
            httpMode: 'POST',
            requestBody: toJson(apiRequestBody),
            url: "${API_URL}",
            customHeaders: [
                [
                    name: 'Content-Type',
                    value: 'application/json; charset=utf-8'
                ],
                [
                    name: 'Accept-Charset',
                    value: 'utf-8'
                ]
            ]
    }
    

    Esto debería resolver el error MissingMethodException y permitirte ejecutar el método callAPI desde tu biblioteca compartida.

Comments are closed.