sintaxis correcta para añadir un mimo-mapeo de web.xml en un plugin de Grails
-
09-09-2019 - |
Pregunta
Estoy intentando añadir un elemento mime-mapping al web.xml.
Mi mejor arma blanca actual es:
def doWithWebDescriptor = { xml ->
xml + {
'mime-mapping' {
'extension'("htc")
'mime-type'("text/x-component")
}
}
}
Sé que el código se ejecuta como el anterior en realidad emite una Web.xml válido. El siguiente parece ser más lógico, pero en realidad no tiene ningún efecto:
def doWithWebDescriptor = { xml ->
xml.'mime-mapping' + {
'extension'("htc")
'mime-type'("text/x-component")
}
}
editar: Estoy usando Grails 1.0.3
Solución
Trate
def doWithWebDescriptor = { xml ->
xml << {
'mime-mapping' {
'extension'("htc")
'mime-type'("text/x-component")
}
}
}
(nótese el leftShift
en lugar de la plus
).
Por otra parte, si usted quiere asegurarse de que el nuevo elemento se inserta en una posición específica dentro del XML, se puede obtener el elemento hijo, después de lo cual usted quiere que su elemento que se inserta, y añadir la suya con el operador plus
. Por ejemplo, utilizo el siguiente código para agregar un nuevo servlet-mapping:
def servletMappings = xml.'servlet-mapping'
servletMappings[servletMappings.size() - 1] + {
'servlet-mapping' {
'servlet-name'("myServlet")
'url-pattern'("/myURL")
}
}
Si quieren investigar más en esto, echar un vistazo a groovy.util.slurpersupport.NodeChild
(el argumento xml
es de ese tipo) y su groovy.util.slurpersupport.GPathResult
superclase.
Buena suerte!
Otros consejos
Creo que ahora se puede lograr lo mismo mediante la adición de un elemento mime-mapping
directamente a la plantilla web.xml en src/templates/war/web.xml
como esto:
<mime-mapping>
<extension>htc</extension>
<mime-type>text/x-component</mime-type>
</mime-mapping>
Hmm, lo único que pude encontrar hace referencia a una propiedad de configuración que se debe establecer con el fin de acceder correctamente los tipos MIME en las solicitudes:
grails.mime.file.extensions = true
Trate de asegurarse de que esto se establece en true, y luego tratar de nuevo con el código que funciona?