I have a web.xml with around 10 servlets defined with some basic configuration such as below:
<servlet>
<servlet-name>dummyServlet</servlet-name>
<servlet-class>com.abc.Servlet</servlet-class>
<init-param>
<param-name>target</param-name>
<param-value>foo.com</param-value>
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dummyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>dummyServlet2</servlet-name>
<servlet-class>com.abc.Servlet2</servlet-class>
<init-param>
<param-name>target</param-name>
<param-value>foo.com</param-value>
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dummyServlet2</servlet-name>
<url-pattern>/dummy</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>actualServlet</servlet-name>
<servlet-class>com.abc.ActualServlet</servlet-class>
<init-param>
<param-name>target</param-name>
<param-value>foo.com</param-value>
</init-param>
<init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dummyServlet</servlet-name>
<url-pattern>/actual</url-pattern>
</servlet-mapping>
Now, from my ant target, based on some conditions, I need to remove both dummy-servlets along with their mappings but need to retain the actual-servlet and it's mapping. Can someone please suggest what would be the best/easy way to do that?
Should I use ant <replace>
or xmltask or some other feature?
Replacing the entire web.xml is not an option.
I took a liberty, and added a root element to the provided XML to make it well-formed.
Please try the following solution via XSLT.
The XSLT is using so called Identity Transform pattern.
You would need to modify two templates for your real XML: and provide a list of dummy Servlets to be removed.
Everything else outside of the dummy Servlets will be kept intact.
Please remember that XML is case sensitive, including actual values.
Input XML
XSLT
Output XML