Я пишу bash-скрипт для редактирования файла server.xml Tomcat. Я успешно добавляю узел соединителя. Чтобы запустить этот пример, скачайте и распакуйте Apache Tomcat 9, перейдите в каталог conf, где находится файл server.xml, и запустите:
xmlstarlet edit -P --inplace \
--subnode "/Server/Service" \
--type elem -n ConnectorNew -v "" \
--insert //ConnectorNew --type attr -n "port" -v "443" \
--insert //ConnectorNew --type attr -n "protocol" -v "org.apache.coyote.http11.Http11NioProtocol" \
--insert //ConnectorNew --type attr -n "keystoreFile" -v "example-key.pem" \
--insert //ConnectorNew --type attr -n "sslProtocol" -v "TLS" \
--insert //ConnectorNew --type attr -n "SSLEnabled" -v "true" \
--subnode "/Server/Service/ConnectorNew" \
--type elem -n "UpgradeProtocolNew" -v "" \
--insert //UpgradeProtocolNew --type attr -n "className" -v "org.apache.coyote.http2.Http2Protocol" \
--rename //ConnectorNew -v Connector \
--rename //UpgradeProtocolNew -v UpgradeProtocol server.xml
, что довольно круто! После запуска это будет соединитель TLS на порту 443 с данным примером ключа. Это будет работать, как обычно, при условии, что файл ключа существует, и он работает как root (реальные развертывания сервера не должны запускаться как root, а должны использовать jsvc вместо этого).
Однако это отображается в самом конце элемента Service. ,В идеале я хотел бы поместить его в файл после последнего существующего элемента Connector, чтобы файл выглядел нормально. Я не думаю, что порядок элементов Connector имеет какое-либо влияние на Tomcat, хотя я хотел бы, чтобы он выглядел как обычный конфигурационный файл, который другие люди ожидали бы, когда будут искать элементы соединителя.
Я предполагаю, что естькакой-то способ сделать это с помощью xmlstarlet, но я не мог понять это.
Я надеюсь, что смогу избежать использования функций xslt, потому что я не хочу изучать и управлять другой технологией, чтобы получить этоСценарий выполнен.
Спасибо!