This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/branch_1x by this push:
new 5d027aa TIKA-3210 -- tika-status should allow an id per server in
/status endpoint; also add num restarts to status endpoint
5d027aa is described below
commit 5d027aa3ee0ff0f7efd7cc7a75c558bdf3a7617c
Author: tallison <[email protected]>
AuthorDate: Mon Oct 19 16:01:23 2020 -0400
TIKA-3210 -- tika-status should allow an id per server in /status endpoint;
also add num restarts to status endpoint
---
.../java/org/apache/tika/server/ServerStatus.java | 17 +++-
.../java/org/apache/tika/server/TikaServerCli.java | 12 ++-
.../org/apache/tika/server/TikaServerWatchDog.java | 35 +++++--
.../tika/server/resource/TikaServerStatus.java | 2 +
.../java/org/apache/tika/server/CXFTestBase.java | 4 +-
.../apache/tika/server/DetectorResourceTest.java | 2 +-
.../org/apache/tika/server/ServerStatusTest.java | 4 +-
.../org/apache/tika/server/StackTraceOffTest.java | 2 +-
.../org/apache/tika/server/StackTraceTest.java | 2 +-
.../tika/server/TikaServerIntegrationTest.java | 109 +++++++++++++++++++++
.../apache/tika/server/TikaServerStatusTest.java | 7 +-
.../org/apache/tika/server/TikaWelcomeTest.java | 2 +-
.../apache/tika/server/TranslateResourceTest.java | 2 +-
13 files changed, 175 insertions(+), 25 deletions(-)
diff --git a/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
b/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
index 32d74cf..bc9ad0a 100644
--- a/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
+++ b/tika-server/src/main/java/org/apache/tika/server/ServerStatus.java
@@ -76,6 +76,8 @@ public class ServerStatus {
};
private static final Logger LOG =
LoggerFactory.getLogger(ServerStatus.class);
+ private final String serverId;
+ private final int numRestarts;
private AtomicLong counter = new AtomicLong(0);
private Map<Long, TaskStatus> tasks = new HashMap<>();
private final boolean isLegacy;
@@ -83,11 +85,13 @@ public class ServerStatus {
private volatile long lastStarted = Instant.now().toEpochMilli();
- public ServerStatus() {
- isLegacy = false;
+ public ServerStatus(String serverId, int numRestarts) {
+ this(serverId, numRestarts, false);
}
- public ServerStatus(boolean isLegacy) {
+ public ServerStatus(String serverId, int numRestarts, boolean isLegacy) {
+ this.serverId = serverId;
+ this.numRestarts = numRestarts;
this.isLegacy = isLegacy;
}
@@ -144,4 +148,11 @@ public class ServerStatus {
return status == STATUS.OPERATING;
}
+ public String getServerId() {
+ return serverId;
+ }
+
+ public int getNumRestarts() {
+ return numRestarts;
+ }
}
diff --git
a/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
b/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
index d1b6baf..4e81582 100644
--- a/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
+++ b/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java
@@ -26,6 +26,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.UUID;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
@@ -92,6 +93,7 @@ public class TikaServerCli {
private static final List<String> ONLY_IN_SPAWN_CHILD_MODE =
Arrays.asList(new String[] { "taskTimeoutMillis",
"taskPulseMillis",
"pingTimeoutMillis", "pingPulseMillis", "maxFiles", "javaHome",
"maxRestarts",
+ "numRestarts",
"childStatusFile", "maxChildStartupMillis", "tmpFilePrefix"});
private static Options getOptions() {
@@ -104,6 +106,7 @@ public class TikaServerCli {
options.addOption("dml", "digestMarkLimit", true, "max number of bytes
to mark on stream for digest");
options.addOption("l", "log", true, "request URI log level ('debug' or
'info')");
options.addOption("s", "includeStack", false, "whether or not to
return a stack trace\nif there is an exception during 'parse'");
+ options.addOption("i", "id", true, "id to use for server in server
status endpoint");
options.addOption("status", false, "enable the status endpoint");
options.addOption("?", "help", false, "this help message");
options.addOption("enableUnsecureFeatures", false, "this is required
to enable fileUrl.");
@@ -123,7 +126,7 @@ public class TikaServerCli {
options.addOption("childStatusFile", true, "Only in spawn child mode:
temporary file used as mmap to communicate " +
"with parent process -- do not use this! Should only be
invoked by parent process.");
options.addOption("tmpFilePrefix", true, "Only in spawn child mode:
prefix for temp file - for debugging only");
-
+ options.addOption("numRestarts", true, "Only in spawn child mode:
number of times that the child has had to be restarted.");
return options;
}
@@ -269,10 +272,13 @@ public class TikaServerCli {
inputStreamFactory = new DefaultInputStreamFactory();
}
+ String serverId = line.hasOption("i") ? line.getOptionValue("i") :
UUID.randomUUID().toString();
+ LOG.debug("SERVER ID:" +serverId);
ServerStatus serverStatus;
//if this is a child process
if (line.hasOption("child")) {
- serverStatus = new ServerStatus();
+ serverStatus = new ServerStatus(serverId,
Integer.parseInt(line.getOptionValue("numRestarts")),
+ false);
//redirect!!!
InputStream in = System.in;
System.setIn(new ByteArrayInputStream(new byte[0]));
@@ -291,7 +297,7 @@ public class TikaServerCli {
serverThread.start();
} else {
- serverStatus = new ServerStatus(true);
+ serverStatus = new ServerStatus(serverId, 0, true);
}
TikaResource.init(tika, digester, inputStreamFactory,
serverStatus);
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
diff --git
a/tika-server/src/main/java/org/apache/tika/server/TikaServerWatchDog.java
b/tika-server/src/main/java/org/apache/tika/server/TikaServerWatchDog.java
index 1358f37..91ce2a1 100644
--- a/tika-server/src/main/java/org/apache/tika/server/TikaServerWatchDog.java
+++ b/tika-server/src/main/java/org/apache/tika/server/TikaServerWatchDog.java
@@ -43,6 +43,7 @@ import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.concurrent.TimeUnit;
import static java.nio.file.StandardOpenOption.READ;
@@ -66,23 +67,24 @@ public class TikaServerWatchDog {
public void execute(String[] args, ServerTimeouts serverTimeouts) throws
Exception {
+ args = addIdIfMissing(args);
LOG.info("server watch dog is starting up");
startPingTimer(serverTimeouts);
try {
- childProcess = new ChildProcess(args, serverTimeouts);
- setChildStatus(CHILD_STATUS.RUNNING);
int restarts = 0;
+ childProcess = new ChildProcess(args, restarts, serverTimeouts);
+ setChildStatus(CHILD_STATUS.RUNNING);
while (true) {
if (!childProcess.ping()) {
LOG.debug("bad ping, initializing");
+ restarts++;
setChildStatus(CHILD_STATUS.INITIALIZING);
lastPing = null;
childProcess.close();
LOG.debug("About to restart the child process");
- childProcess = new ChildProcess(args, serverTimeouts);
+ childProcess = new ChildProcess(args, restarts,
serverTimeouts);
LOG.info("Successfully restarted child process -- {}
restarts so far)", restarts);
setChildStatus(CHILD_STATUS.RUNNING);
- restarts++;
if (serverTimeouts.getMaxRestarts() > -1 && restarts >=
serverTimeouts.getMaxRestarts()) {
LOG.warn("hit max restarts: "+restarts+". Stopping
now");
break;
@@ -102,6 +104,21 @@ public class TikaServerWatchDog {
}
}
+ private String[] addIdIfMissing(String[] args) {
+ for (String arg : args) {
+ //id is already specified, leave the array as is
+ if (arg.equals("-i") || arg.equals("--id")) {
+ return args;
+ }
+ }
+
+ String[] newArgs = new String[args.length+2];
+ System.arraycopy(args, 0, newArgs, 0, args.length);
+ newArgs[args.length] = "--id";
+ newArgs[args.length+1] = UUID.randomUUID().toString();
+ return newArgs;
+ }
+
private void startPingTimer(ServerTimeouts serverTimeouts) {
//if the child thread is in stop-the-world mode, and isn't
//reading the ping, this thread checks to make sure
@@ -222,7 +239,7 @@ public class TikaServerWatchDog {
private final Path childStatusFile;
private final ByteBuffer statusBuffer = ByteBuffer.allocate(16);
- private ChildProcess(String[] args, ServerTimeouts serverTimeouts)
throws Exception {
+ private ChildProcess(String[] args, int numRestarts, ServerTimeouts
serverTimeouts) throws Exception {
String prefix = DEFAULT_CHILD_STATUS_FILE_PREFIX;
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-tmpFilePrefix")) {
@@ -232,7 +249,7 @@ public class TikaServerWatchDog {
this.childStatusFile = Files.createTempFile(prefix, "");
this.serverTimeouts = serverTimeouts;
- this.process = startProcess(args, childStatusFile);
+ this.process = startProcess(args, numRestarts, childStatusFile);
//wait for file to be written/initialized by child process
Instant start = Instant.now();
@@ -368,7 +385,7 @@ public class TikaServerWatchDog {
}
- private Process startProcess(String[] args, Path childStatusFile)
throws IOException {
+ private Process startProcess(String[] args, int numRestarts, Path
childStatusFile) throws IOException {
ProcessBuilder builder = new ProcessBuilder();
builder.redirectError(ProcessBuilder.Redirect.INHERIT);
@@ -391,7 +408,9 @@ public class TikaServerWatchDog {
argList.add("org.apache.tika.server.TikaServerCli");
argList.addAll(childArgs);
argList.add("-child");
- LOG.debug("child process commandline: " +argList.toString());
+ argList.add("--numRestarts");
+ argList.add(Integer.toString(numRestarts));
+ LOG.info("child process commandline: " +argList.toString());
builder.command(argList);
Process process = builder.start();
//redirect stdout to parent stderr to avoid error msgs
diff --git
a/tika-server/src/main/java/org/apache/tika/server/resource/TikaServerStatus.java
b/tika-server/src/main/java/org/apache/tika/server/resource/TikaServerStatus.java
index 2e55221..fbbf382 100644
---
a/tika-server/src/main/java/org/apache/tika/server/resource/TikaServerStatus.java
+++
b/tika-server/src/main/java/org/apache/tika/server/resource/TikaServerStatus.java
@@ -36,9 +36,11 @@ public class TikaServerStatus {
@Produces("application/json")
public Map<String, Object> getStatus() {
Map<String, Object> map = new LinkedHashMap<>();
+ map.put("server_id", serverStatus.getServerId());
map.put("status", serverStatus.getStatus());
map.put("millis_since_last_parse_started",
serverStatus.getMillisSinceLastParseStarted());
map.put("files_processed", serverStatus.getFilesProcessed());
+ map.put("num_restarts", serverStatus.getNumRestarts());
return map;
}
}
diff --git a/tika-server/src/test/java/org/apache/tika/server/CXFTestBase.java
b/tika-server/src/test/java/org/apache/tika/server/CXFTestBase.java
index 8b5f153..ada3ce7 100644
--- a/tika-server/src/test/java/org/apache/tika/server/CXFTestBase.java
+++ b/tika-server/src/test/java/org/apache/tika/server/CXFTestBase.java
@@ -94,7 +94,7 @@ public abstract class CXFTestBase {
this.tika = new TikaConfig(getTikaConfigInputStream());
TikaResource.init(tika,
new CommonsDigester(DIGESTER_READ_LIMIT, "md5,sha1:32"),
- new DefaultInputStreamFactory(), new ServerStatus(true));
+ new DefaultInputStreamFactory(), new ServerStatus("", 0,true));
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
//set compression interceptors
sf.setOutInterceptors(
@@ -142,7 +142,7 @@ public abstract class CXFTestBase {
server.destroy();
}
- protected String getStringFromInputStream(InputStream in) throws Exception
{
+ static String getStringFromInputStream(InputStream in) throws Exception {
return IOUtils.toString(in, UTF_8);
}
diff --git
a/tika-server/src/test/java/org/apache/tika/server/DetectorResourceTest.java
b/tika-server/src/test/java/org/apache/tika/server/DetectorResourceTest.java
index 5b1e7b7..a5ed5b3 100644
--- a/tika-server/src/test/java/org/apache/tika/server/DetectorResourceTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/DetectorResourceTest.java
@@ -45,7 +45,7 @@ public class DetectorResourceTest extends CXFTestBase {
protected void setUpResources(JAXRSServerFactoryBean sf) {
sf.setResourceClasses(DetectorResource.class);
sf.setResourceProvider(DetectorResource.class,
- new SingletonResourceProvider(new DetectorResource(new
ServerStatus())));
+ new SingletonResourceProvider(new DetectorResource(new
ServerStatus("", 0))));
}
diff --git
a/tika-server/src/test/java/org/apache/tika/server/ServerStatusTest.java
b/tika-server/src/test/java/org/apache/tika/server/ServerStatusTest.java
index 39d1583..0ad8f26 100644
--- a/tika-server/src/test/java/org/apache/tika/server/ServerStatusTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/ServerStatusTest.java
@@ -33,7 +33,7 @@ public class ServerStatusTest {
@Test(expected = IllegalArgumentException.class)
public void testBadId() throws Exception {
- ServerStatus status = new ServerStatus();
+ ServerStatus status = new ServerStatus("", 0);
status.complete(2);
}
@@ -44,7 +44,7 @@ public class ServerStatusTest {
int filesToProcess = 20;
ExecutorService service = Executors.newFixedThreadPool(numThreads);
ExecutorCompletionService<Integer> completionService = new
ExecutorCompletionService<>(service);
- ServerStatus serverStatus = new ServerStatus();
+ ServerStatus serverStatus = new ServerStatus("", 0);
for (int i = 0; i < numThreads; i++) {
completionService.submit(new MockTask(serverStatus,
filesToProcess));
}
diff --git
a/tika-server/src/test/java/org/apache/tika/server/StackTraceOffTest.java
b/tika-server/src/test/java/org/apache/tika/server/StackTraceOffTest.java
index 5e0bf63..58ca94f 100644
--- a/tika-server/src/test/java/org/apache/tika/server/StackTraceOffTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/StackTraceOffTest.java
@@ -66,7 +66,7 @@ public class StackTraceOffTest extends CXFTestBase {
List<ResourceProvider> rCoreProviders = new
ArrayList<ResourceProvider>();
rCoreProviders.add(new SingletonResourceProvider(new
MetadataResource()));
rCoreProviders.add(new SingletonResourceProvider(new
RecursiveMetadataResource()));
- rCoreProviders.add(new SingletonResourceProvider(new
DetectorResource(new ServerStatus())));
+ rCoreProviders.add(new SingletonResourceProvider(new
DetectorResource(new ServerStatus("", 0))));
rCoreProviders.add(new SingletonResourceProvider(new TikaResource()));
rCoreProviders.add(new SingletonResourceProvider(new
UnpackerResource()));
sf.setResourceProviders(rCoreProviders);
diff --git
a/tika-server/src/test/java/org/apache/tika/server/StackTraceTest.java
b/tika-server/src/test/java/org/apache/tika/server/StackTraceTest.java
index f32d991..5115fd0 100644
--- a/tika-server/src/test/java/org/apache/tika/server/StackTraceTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/StackTraceTest.java
@@ -60,7 +60,7 @@ public class StackTraceTest extends CXFTestBase {
List<ResourceProvider> rCoreProviders = new
ArrayList<ResourceProvider>();
rCoreProviders.add(new SingletonResourceProvider(new
MetadataResource()));
rCoreProviders.add(new SingletonResourceProvider(new
RecursiveMetadataResource()));
- rCoreProviders.add(new SingletonResourceProvider(new
DetectorResource(new ServerStatus())));
+ rCoreProviders.add(new SingletonResourceProvider(new
DetectorResource(new ServerStatus("", 0))));
rCoreProviders.add(new SingletonResourceProvider(new TikaResource()));
rCoreProviders.add(new SingletonResourceProvider(new
UnpackerResource()));
sf.setResourceProviders(rCoreProviders);
diff --git
a/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
b/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
index c36ab90..abce3cf 100644
---
a/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
+++
b/tika-server/src/test/java/org/apache/tika/server/TikaServerIntegrationTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.tika.server;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.tika.TikaTest;
@@ -61,6 +63,7 @@ public class TikaServerIntegrationTest extends TikaTest {
private static final String TEST_STDOUT_STDERR = "mock/testStdOutErr.xml";
private static final String TEST_STATIC_STDOUT_STDERR =
"mock/testStaticStdOutErr.xml";
private static final String META_PATH = "/rmeta";
+ private static final String STATUS_PATH = "/status";
private static final long MAX_WAIT_MS = 60000;
@@ -184,6 +187,112 @@ public class TikaServerIntegrationTest extends TikaTest {
}
@Test
+ public void testSameServerIdAfterOOM() throws Exception {
+
+ Thread serverThread = new Thread() {
+ @Override
+ public void run() {
+ TikaServerCli.main(
+ new String[]{
+ "-spawnChild", "-JXmx256m",
+ "-p", INTEGRATION_TEST_PORT,
+ "-pingPulseMillis", "100",
+ "--status",
+ "-tmpFilePrefix", "tika-server-oom"
+
+ });
+ }
+ };
+ serverThread.start();
+ awaitServerStartup();
+ String serverId = getServerId();
+ Response response = null;
+ try {
+ response = WebClient
+ .create(endPoint + META_PATH)
+ .accept("application/json")
+ .put(ClassLoader
+ .getSystemResourceAsStream(TEST_OOM));
+ } catch (Exception e) {
+ //oom may or may not cause an exception depending
+ //on the timing
+ }
+ //give some time for the server to crash/kill itself
+ Thread.sleep(2000);
+ try {
+ testBaseline();
+ assertEquals(serverId, getServerId());
+ assertEquals(1, getNumRestarts());
+ } finally {
+ serverThread.interrupt();
+ }
+ }
+
+ @Test
+ public void testSameDeclaredServerIdAfterOOM() throws Exception {
+ String serverId = "qwertyuiop";
+ Thread serverThread = new Thread() {
+ @Override
+ public void run() {
+ TikaServerCli.main(
+ new String[]{
+ "-spawnChild", "-JXmx256m",
+ "-p", INTEGRATION_TEST_PORT,
+ "-pingPulseMillis", "100",
+ "--status",
+ "--id",
+ serverId,
+ "-tmpFilePrefix", "tika-server-oom"
+
+ });
+ }
+ };
+ serverThread.start();
+ awaitServerStartup();
+ Response response = null;
+ try {
+ response = WebClient
+ .create(endPoint + META_PATH)
+ .accept("application/json")
+ .put(ClassLoader
+ .getSystemResourceAsStream(TEST_OOM));
+ } catch (Exception e) {
+ //oom may or may not cause an exception depending
+ //on the timing
+ }
+ //give some time for the server to crash/kill itself
+ Thread.sleep(2000);
+ try {
+ testBaseline();
+ assertEquals(serverId, getServerId());
+ } finally {
+ serverThread.interrupt();
+ }
+ }
+
+ private String getServerId() throws Exception {
+ Response response = WebClient
+ .create(endPoint + STATUS_PATH)
+ .accept("application/json")
+ .get();
+ String jsonString =
+ CXFTestBase.getStringFromInputStream((InputStream)
response.getEntity());
+ JsonObject root = JsonParser.parseString(jsonString).getAsJsonObject();
+ return root.get("server_id").getAsJsonPrimitive().getAsString();
+ }
+
+ private int getNumRestarts() throws Exception {
+ Response response = WebClient
+ .create(endPoint + STATUS_PATH)
+ .accept("application/json")
+ .get();
+ String jsonString =
+ CXFTestBase.getStringFromInputStream((InputStream)
response.getEntity());
+ JsonObject root = JsonParser.parseString(jsonString).getAsJsonObject();
+ return root.get("num_restarts").getAsJsonPrimitive().getAsInt();
+ }
+
+ @Test
public void testSystemExit() throws Exception {
Thread serverThread = new Thread() {
diff --git
a/tika-server/src/test/java/org/apache/tika/server/TikaServerStatusTest.java
b/tika-server/src/test/java/org/apache/tika/server/TikaServerStatusTest.java
index 28e62e7..f6a9af8 100644
--- a/tika-server/src/test/java/org/apache/tika/server/TikaServerStatusTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/TikaServerStatusTest.java
@@ -17,6 +17,7 @@ import javax.ws.rs.core.Response;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -24,12 +25,12 @@ import static org.junit.Assert.assertTrue;
public class TikaServerStatusTest extends CXFTestBase {
private final static String STATUS_PATH = "/status";
-
+ private final static String SERVER_ID = UUID.randomUUID().toString();
@Override
protected void setUpResources(JAXRSServerFactoryBean sf) {
sf.setResourceClasses(TikaServerStatus.class);
sf.setResourceProvider(TikaServerStatus.class,
- new SingletonResourceProvider(new TikaServerStatus(new
ServerStatus())));
+ new SingletonResourceProvider(new TikaServerStatus(new
ServerStatus(SERVER_ID, 0))));
}
@Override
@@ -45,6 +46,7 @@ public class TikaServerStatusTest extends CXFTestBase {
String jsonString =
getStringFromInputStream((InputStream) response.getEntity());
JsonObject root = JsonParser.parseString(jsonString).getAsJsonObject();
+ assertTrue(root.has("server_id"));
assertTrue(root.has("status"));
assertTrue(root.has("millis_since_last_parse_started"));
assertTrue(root.has("files_processed"));
@@ -52,5 +54,6 @@ public class TikaServerStatusTest extends CXFTestBase {
assertEquals(0, root.getAsJsonPrimitive("files_processed").getAsInt());
long millis =
root.getAsJsonPrimitive("millis_since_last_parse_started").getAsInt();
assertTrue(millis > 0 && millis < 360000);
+ assertEquals(SERVER_ID,
root.getAsJsonPrimitive("server_id").getAsString());
}
}
diff --git
a/tika-server/src/test/java/org/apache/tika/server/TikaWelcomeTest.java
b/tika-server/src/test/java/org/apache/tika/server/TikaWelcomeTest.java
index a52a79a..f0f3dac 100644
--- a/tika-server/src/test/java/org/apache/tika/server/TikaWelcomeTest.java
+++ b/tika-server/src/test/java/org/apache/tika/server/TikaWelcomeTest.java
@@ -45,7 +45,7 @@ public class TikaWelcomeTest extends CXFTestBase {
List<ResourceProvider> rpsCore =
new ArrayList<ResourceProvider>();
rpsCore.add(new SingletonResourceProvider(new TikaVersion()));
- rpsCore.add(new SingletonResourceProvider(new DetectorResource(new
ServerStatus())));
+ rpsCore.add(new SingletonResourceProvider(new DetectorResource(new
ServerStatus("", 0))));
rpsCore.add(new SingletonResourceProvider(new MetadataResource()));
List<ResourceProvider> all = new ArrayList<ResourceProvider>(rpsCore);
all.add(new SingletonResourceProvider(new TikaWelcome(rpsCore)));
diff --git
a/tika-server/src/test/java/org/apache/tika/server/TranslateResourceTest.java
b/tika-server/src/test/java/org/apache/tika/server/TranslateResourceTest.java
index c52db65..501dcdd 100644
---
a/tika-server/src/test/java/org/apache/tika/server/TranslateResourceTest.java
+++
b/tika-server/src/test/java/org/apache/tika/server/TranslateResourceTest.java
@@ -47,7 +47,7 @@ public class TranslateResourceTest extends CXFTestBase {
protected void setUpResources(JAXRSServerFactoryBean sf) {
sf.setResourceClasses(TranslateResource.class);
sf.setResourceProvider(TranslateResource.class,
- new SingletonResourceProvider(new
TranslateResource(new ServerStatus())));
+ new SingletonResourceProvider(new
TranslateResource(new ServerStatus("", 0))));
}