Skip to content

Commit

Permalink
Make webxmlprocessing handle spaces better
Browse files Browse the repository at this point in the history
  • Loading branch information
loosebazooka committed Feb 11, 2014
1 parent 350087f commit daca350
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ class WebXmlProcessing {

static List<String> getApiServiceClasses(webXmlFile) {
def root = new XmlSlurper().parse(webXmlFile)
getApiServiceClasses(root)
}

static List<String> getApiServiceClasses(GPathResult root) {
getClassNames(getServicesParam(getSystemServiceServlet(root)))
}

Expand All @@ -50,7 +54,9 @@ class WebXmlProcessing {

private static String[] getClassNames(NodeChild servicesParam) {
assert servicesParam.name() == "init-param"
return servicesParam."param-value".text().trim().split(",")
return servicesParam."param-value".text().trim().split(",").collect { String service ->
service.trim()
}
}

public static NodeChild getSystemServiceServletMapping(GPathResult root, NodeChild servlet) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.google.appengine.task.endpoints

import groovy.util.slurpersupport.GPathResult
import spock.lang.Specification

/**
* Simple test to ensure the services classes are read from a properly formatted file
*
* @author Appu Goundan
*/
class WebXmlTest extends Specification {
def "Get single service classes"() {
given: "A web.xml"
def webXmlParsed = createWebXml("com.google.appengine.endpoints.OneEndpoint")

when: "Parsing service classes"
List<String> services = WebXmlProcessing.getApiServiceClasses(webXmlParsed)

then: "The classes parsed"
services.size() == 1
services.get(0) == "com.google.appengine.endpoints.OneEndpoint"
}

def "Get multiple service classes"() {
given: "A web.xml"
def webXmlParsed = createWebXml("com.google.appengine.endpoints.OneEndpoint, com.google.appengine.endpoints.TwoEndpoint")

when: "Parsing service classes"
List<String> services = WebXmlProcessing.getApiServiceClasses(webXmlParsed)

then: "The classes parsed"
services.size() == 2
services.get(0) == "com.google.appengine.endpoints.OneEndpoint"
services.get(1) == "com.google.appengine.endpoints.TwoEndpoint"
}

private GPathResult createWebXml(String serviceClassParam) {
String webXml =
"""
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>SystemServiceServlet</servlet-name>
<servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
<init-param>
<param-name>services</param-name>
<param-value>${serviceClassParam}</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>
</web-app>
"""
new XmlSlurper().parseText(webXml)
}
}

0 comments on commit daca350

Please sign in to comment.