Add osgi spec classes
diff --git a/org.osgi.service.jaxrs.whiteboard/bnd.bnd b/org.osgi.service.jaxrs.whiteboard/bnd.bnd
new file mode 100644
index 0000000..384fb41
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/bnd.bnd
@@ -0,0 +1,7 @@
+# Since the packages don't start with the project name, we need to tell javadoc the packages
+org.osgi.service.jaxrs.whiteboard.specs = org.osgi.service.jaxrs.*
+
+Export-Package: \
+ org.osgi.service.jaxrs.*
+
+-contract: JavaJAXRS
\ No newline at end of file
diff --git a/org.osgi.service.jaxrs.whiteboard/pom.xml b/org.osgi.service.jaxrs.whiteboard/pom.xml
new file mode 100644
index 0000000..5092571
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/pom.xml
@@ -0,0 +1,46 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.aries.jax.rs</groupId>
+ <artifactId>org.apache.aries.jax.rs</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.apache.aries.jax.rs.api</artifactId>
+ <description>Apache Aries JAX-RS API</description>
+ <name>Apache Aries JAX-RS API</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>6.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation</artifactId>
+ <version>6.0.0</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntime.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntime.java
new file mode 100644
index 0000000..a93a57d
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntime.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime;
+
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.service.jaxrs.runtime.dto.RequestInfoDTO;
+import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO;
+
+/**
+ * The HttpServiceRuntime service represents the runtime information of an Http
+ * Whiteboard implementation.
+ *
+ * <p>
+ * It provides access to DTOs representing the current state of the service.
+ * <p>
+ * The HttpServiceRuntime service must be registered with the
+ * {@link JaxRSServiceRuntimeConstants#JAX_RS_SERVICE_ENDPOINT} service
+ * property.
+ *
+ * @ThreadSafe
+ * @author $Id: 358252f603be05c7ac7bf0600eee24ff090fa7a9 $
+ */
+@ProviderType
+public interface JaxRSServiceRuntime {
+
+ /**
+ * Return the runtime DTO representing the current state.
+ *
+ * @return The runtime DTO.
+ */
+ public RuntimeDTO getRuntimeDTO();
+
+ /**
+ * Return a request info DTO containing the services involved with
+ * processing a request for the specified path.
+ *
+ * @param path The request path, relative to the root of the JAX-RS
+ * Whiteboard implementation.
+ * @return The request info DTO for the specified path.
+ */
+ public RequestInfoDTO calculateRequestInfoDTO(String path);
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntimeConstants.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntimeConstants.java
new file mode 100644
index 0000000..d3e2a1f
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/JaxRSServiceRuntimeConstants.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime;
+
+/**
+ * Defines standard names for Http Runtime Service constants.
+ *
+ * @author $Id: f1505ce89e8f90e78700c36abbe591df11991a1f $
+ */
+public final class JaxRSServiceRuntimeConstants {
+ private JaxRSServiceRuntimeConstants() {
+ // non-instantiable
+ }
+
+ /**
+ * JAX-RS Runtime Service service property specifying the endpoints upon
+ * which the JAX-RS implementation is available.
+ *
+ * <p>
+ * An endpoint value is a URL or a relative path, to which the JAX-RS
+ * Whiteboard implementation is listening. For example,
+ * {@code http://192.168.1.10:8080/} or {@code /myapp/}. A relative path may
+ * be used if the scheme and authority parts of the URL are not known, e.g.
+ * if a bridged Http Whiteboard implementation is used. If the JAX-RS
+ * Whiteboard implementation is serving the root context and neither scheme
+ * nor authority is known, the value of the property is "/". Both, a URL and
+ * a relative path, must end with a slash.
+ * <p>
+ * A JAX-RS Whiteboard implementation can be listening on multiple
+ * endpoints.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String},
+ * {@code String[]}, or {@code Collection<String>}.
+ */
+ public static final String JAX_RS_SERVICE_ENDPOINT = "osgi.jaxrs.endpoint";
+
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/DTOConstants.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/DTOConstants.java
new file mode 100644
index 0000000..c8ca9d9
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/DTOConstants.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+/**
+ * Defines standard constants for the DTOs.
+ *
+ * The error codes are defined to take the same values as used by the Http
+ * Service Whiteboard
+ */
+public final class DTOConstants {
+ private DTOConstants() {
+ // non-instantiable
+ }
+
+ /**
+ * Failure reason is unknown.
+ */
+ public static final int FAILURE_REASON_UNKNOWN = 0;
+
+ /**
+ * Service is shadowed by another service.
+ * <p>
+ * For example, a service with the same service properties but a higher
+ * service ranking.
+ */
+ public static final int FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE = 3;
+
+ /**
+ * The service is registered in the service registry but getting the service
+ * fails as it returns {@code null}.
+ */
+ public static final int FAILURE_REASON_SERVICE_NOT_GETTABLE = 5;
+
+ /**
+ * The service is registered in the service registry but the service
+ * properties are invalid.
+ */
+ public static final int FAILURE_REASON_VALIDATION_FAILED = 6;
+
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedFilterDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedFilterDTO.java
new file mode 100644
index 0000000..fc57e65
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedFilterDTO.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+/**
+ * Represents a JAX-RS Filter service which is currently not being used due to a
+ * problem.
+ * <p>
+ * As the service represented by this DTO is not used due to a failure, the
+ * field {@link FilterDTO#filteredByName} always returns {null}.
+ *
+ * @NotThreadSafe
+ * @author $Id: 9f4ff6dfd5199d5b2289230a45b3f70940ac36d3 $
+ */
+public class FailedFilterDTO extends FilterDTO {
+
+ /**
+ * The reason why the servlet filter represented by this DTO is not used.
+ *
+ * @see DTOConstants#FAILURE_REASON_UNKNOWN
+ * @see DTOConstants#FAILURE_REASON_SERVICE_NOT_GETTABLE
+ * @see DTOConstants#FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE
+ */
+ public int failureReason;
+
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedInterceptorDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedInterceptorDTO.java
new file mode 100644
index 0000000..21ee39b
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedInterceptorDTO.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+/**
+ * Represents a JAX-RS Interceptor service that is currently not being used by a
+ * servlet context due to a problem.
+ * <p>
+ * As the service represented by this DTO is not used due to a failure, the
+ * field {@link InterceptorDTO#interceptedByName} always returns {null}.
+ *
+ * @NotThreadSafe
+ * @author $Id: a1a4b7a90435d18de2ad441e3767aff9159928ac $
+ */
+public class FailedInterceptorDTO extends InterceptorDTO {
+
+ /**
+ * The reason why the servlet represented by this DTO is not used.
+ *
+ * @see DTOConstants#FAILURE_REASON_UNKNOWN
+ * @see DTOConstants#FAILURE_REASON_SERVICE_NOT_GETTABLE
+ * @see DTOConstants#FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE
+ */
+ public int failureReason;
+
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedResourceDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedResourceDTO.java
new file mode 100644
index 0000000..d8aa74d
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FailedResourceDTO.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+/**
+ * Represents a JAX-RS service which is currently not being used due to a
+ * problem.
+ * <p>
+ * As the service represented by this DTO is not used due to a failure, the
+ * field {@link ResourceDTO#resourceMethods} always returns null.
+ *
+ * @NotThreadSafe
+ * @author $Id: 592fcbc590483a05dd9afe72c061b07dbe87a9bd $
+ */
+public class FailedResourceDTO extends ResourceDTO {
+
+ /**
+ * The reason why the servlet represented by this DTO is not used.
+ *
+ * @see DTOConstants#FAILURE_REASON_UNKNOWN
+ * @see DTOConstants#FAILURE_REASON_SERVICE_NOT_GETTABLE
+ * @see DTOConstants#FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE
+ */
+ public int failureReason;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FilterDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FilterDTO.java
new file mode 100644
index 0000000..67e81a1
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/FilterDTO.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+import org.osgi.service.jaxrs.runtime.JaxRSServiceRuntime;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+
+/**
+ * Represents a JAX-RS Filter service currently being hosted by the
+ * {@link JaxRSServiceRuntime}
+ *
+ * @NotThreadSafe
+ * @author $Id: b77350dc50279a655618cb40497fee9bc33ebd20 $
+ */
+public class FilterDTO extends DTO {
+
+ /**
+ * The request mappings for the filter, as declared in
+ * {@link JaxRSWhiteboardConstants#JAX_RS_FILTER_BASE}
+ *
+ * <p>
+ * The specified patterns are used to determine whether a request is mapped
+ * to the JAX-RS filter. This array might be empty.
+ */
+ public String[] baseUris;
+
+ /**
+ * The resourceDTOs that are mapped to this Filter using a named annotation
+ */
+ public ResourceDTO[] filteredByName;
+
+ /**
+ * Service property identifying the JAX-RS filter service.
+ */
+ public long serviceId;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/InterceptorDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/InterceptorDTO.java
new file mode 100644
index 0000000..5d09244
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/InterceptorDTO.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+import org.osgi.service.jaxrs.runtime.JaxRSServiceRuntime;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+
+/**
+ * Represents a JAX-RS Interceptor service currently being hosted by the
+ * {@link JaxRSServiceRuntime}
+ *
+ * @NotThreadSafe
+ * @author $Id: 1439e80cb16c3884d2d7df675dda5c28f875f11a $
+ */
+public class InterceptorDTO extends DTO {
+
+ /**
+ * The request mappings for the interceptor, as declared in
+ * {@link JaxRSWhiteboardConstants#JAX_RS_INTERCEPTOR_BASE}
+ *
+ * <p>
+ * The specified patterns are used to determine whether a request is mapped
+ * to the interceptor. This array might be empty.
+ */
+ public String[] baseUris;
+
+ /**
+ * The resourceDTOs that are mapped to this interceptor using a named
+ * annotation
+ */
+ public ResourceDTO[] interceptedByName;
+
+ /**
+ * Service property identifying the JAX-RS interceptor service.
+ */
+ public long serviceId;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RequestInfoDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RequestInfoDTO.java
new file mode 100644
index 0000000..7f07458
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RequestInfoDTO.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+
+/**
+ * Represents the services used to process a specific request.
+ *
+ * @NotThreadSafe
+ * @author $Id: f4057465a154262be95874eda521be22f20626ff $
+ */
+public class RequestInfoDTO extends DTO {
+ /**
+ * The path of the request relative to the root.
+ */
+ public String path;
+
+ /**
+ * The service id of the servlet context processing the request represented
+ * by this DTO.
+ */
+ public long servletContextId;
+
+ /**
+ * The JAX-RS filters processing this request. If no filters are called for
+ * processing this request, an empty array is returned.
+ */
+ public FilterDTO[] filterDTOs;
+
+ /**
+ * The JAX-RS interceptors processing this request. If no interceptors are
+ * called for processing this request, an empty array is returned.
+ */
+ public InterceptorDTO[] interceptorDTOs;
+
+ /**
+ * The resource processing this request.
+ */
+ public ResourceDTO servletDTO;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceDTO.java
new file mode 100644
index 0000000..f4f096b
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceDTO.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+
+/**
+ * Represents common information about a JAX-RS resource service.
+ *
+ * @NotThreadSafe
+ * @author $Id: 4fa63e56e3b12dba342cb8172ad13cb219b3c5d0 $
+ */
+public abstract class ResourceDTO extends DTO {
+ /**
+ * The name of the resource if it set one using
+ * {@link JaxRSWhiteboardConstants#JAX_RS_RESOURCE_NAME}, {@code null}
+ * otherwise.
+ */
+ public String name;
+
+ /**
+ * The base URI of the resource defined by
+ * {@link JaxRSWhiteboardConstants#JAX_RS_RESOURCE_BASE}.
+ */
+ public String base;
+
+ /**
+ * The RequestPaths handled by this resource
+ */
+ public ResourceMethodInfoDTO[] resourceMethods;
+
+ /**
+ * Service property identifying the JAX-RS resource service
+ */
+ public long serviceId;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceMethodInfoDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceMethodInfoDTO.java
new file mode 100644
index 0000000..63772b8
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/ResourceMethodInfoDTO.java
@@ -0,0 +1,33 @@
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+
+/**
+ * Represents information about a JAX-RS resource method.
+ *
+ * @NotThreadSafe
+ * @author $Id: 55683e4bb50d121a46c8c94d315d9ab0a051195f $
+ */
+public class ResourceMethodInfoDTO extends DTO {
+
+ /**
+ * The HTTP verb being handled, for example GET, DELETE, PUT, POST, HEAD,
+ * OPTIONS
+ */
+ String method;
+
+ /**
+ * The mime-type(s) consumed by this resource method, null if not defined
+ */
+ String[] consumingMimeType;
+
+ /**
+ * The mime-type(s) produced by this resource method, null if not defined
+ */
+ String[] producingMimeType;
+
+ /**
+ * The URI of this sub-resource, null if this is not a sub-resource method
+ */
+ String uri;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RuntimeDTO.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RuntimeDTO.java
new file mode 100644
index 0000000..c941055
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/RuntimeDTO.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.dto.DTO;
+import org.osgi.framework.dto.ServiceReferenceDTO;
+import org.osgi.resource.dto.ResourceDTO;
+import org.osgi.service.jaxrs.runtime.JaxRSServiceRuntime;
+
+/**
+ * Represents the state of a Http Service Runtime.
+ *
+ * @NotThreadSafe
+ * @author $Id: 482544b936babd00c55476277dc5bcb569428e97 $
+ */
+public class RuntimeDTO extends DTO {
+
+ /**
+ * The DTO for the corresponding {@code JaxRSServiceRuntime}. This value is
+ * never {@code null}.
+ */
+ public ServiceReferenceDTO serviceDTO;
+
+ /**
+ * The root context path. This path may be "/", or it may be a sub path if
+ * this {@link JaxRSServiceRuntime} is running within an external Http
+ * container.
+ */
+ public String contextPath;
+
+ /**
+ * Returns the representations of the JAX-RS resource services associated
+ * with this Runtime.
+ *
+ * The returned array may be empty if this context is currently not
+ * associated with any JAX-RS Resource services.
+ */
+ public ResourceDTO[] resourceDTOs;
+
+ /**
+ * Returns the representations of the JAX-RS Filter services associated with
+ * this Runtime.
+ *
+ * The returned array may be empty if this context is currently not
+ * associated with any JAX-RS Filter services.
+ */
+ public FilterDTO[] filterDTOs;
+
+ /**
+ * Returns the representations of the JAX-RS Interceptor services associated
+ * with this Runtime.
+ *
+ * The returned array may be empty if this context is currently not
+ * associated with any JAX-RS Filter services.
+ */
+ public InterceptorDTO[] interceptorDTOs;
+
+ /**
+ * Returns the representations of the JAX-RS resource services associated
+ * with this runtime but currently not used due to some problem. The
+ * returned array may be empty.
+ */
+ public FailedResourceDTO[] failedServletDTOs;
+
+ /**
+ * Returns the representations of the JAX-RS Filter services associated with
+ * this runtime but currently not used due to some problem. The returned
+ * array may be empty.
+ */
+ public FailedFilterDTO[] failedFilterDTOs;
+
+ /**
+ * Returns the representations of the JAX-RS Interceptor services associated
+ * with this runtime but currently not used due to some problem. The
+ * returned array may be empty.
+ */
+ public FailedInterceptorDTO[] failedErrorPageDTOs;
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/package-info.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/package-info.java
new file mode 100644
index 0000000..94312e8
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/dto/package-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Runtime DTO Package Version 1.0.
+ *
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ *
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.runtime.dto; version="[1.0,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.runtime.dto; version="[1.0,1.1)"}
+ *
+ * @author $Id: eca6f4e9f419fbd23ffed23f9f3c399fe8b45fb7 $
+ */
+
+@Version("1.0")
+package org.osgi.service.jaxrs.runtime.dto;
+
+import org.osgi.annotation.versioning.Version;
+
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/package-info.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/package-info.java
new file mode 100644
index 0000000..9c2f120
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/runtime/package-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Runtime Package Version 1.0.
+ *
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ *
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.runtime; version="[1.0,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.runtime; version="[1.0,1.1)"}
+ *
+ * @author $Id: 1663285382a67fde3f51780882716d9f064b8ed2 $
+ */
+
+@Version("1.0")
+package org.osgi.service.jaxrs.runtime;
+
+import org.osgi.annotation.versioning.Version;
+
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/JaxRSWhiteboardConstants.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/JaxRSWhiteboardConstants.java
new file mode 100644
index 0000000..07cbd6d
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/JaxRSWhiteboardConstants.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.service.jaxrs.whiteboard;
+
+import java.nio.file.DirectoryStream.Filter;
+import org.osgi.service.jaxrs.runtime.JaxRSServiceRuntimeConstants;
+
+/**
+ * Defines standard constants for the JAX-RS Whiteboard services.
+ *
+ * @author $Id: e94aefad35bbbaf2b3918b0af9361742ad2c9a7b $
+ */
+public final class JaxRSWhiteboardConstants {
+ private JaxRSWhiteboardConstants() {
+ // non-instantiable
+ }
+
+ /**
+ * Service property specifying the name of a JAX-RS resource.
+ *
+ * <p>
+ * This name is provided as a property on the registered Endpoint service so
+ * that the URI for a particular JAX-RS service can be identified. If this
+ * service property is not specified, then no Endpoint information will be
+ * registered for this resource.
+ *
+ * <p>
+ * Resource names should be unique among all resource service associated
+ * with a single Whiteboard implementation.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String}.
+ */
+ public static final String JAX_RS_RESOURCE_NAME = "osgi.jaxrs.name";
+
+ /**
+ * Service property specifying the base URI mapping for a JAX-RS resource
+ * service.
+ *
+ * <p>
+ * The specified uri is used to determine whether a request should be mapped
+ * to the resource. Services without this service property are ignored.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String}, and
+ * will have a "/" prepended if no "/" exists.
+ */
+ public static final String JAX_RS_RESOURCE_BASE = "osgi.jaxrs.resource.base";
+
+ /**
+ * Service property specifying the request mappings for a JAX-RS filter
+ * service.
+ *
+ * <p>
+ * The specified patterns are used to determine whether a request should be
+ * mapped to the filter. Filter services without this service property are
+ * ignored.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String},
+ * {@code String[]}, or {@code Collection<String>}.
+ */
+ public static final String JAX_RS_FILTER_BASE = "osgi.jaxrs.filter.base";
+
+ /**
+ * Service property specifying the request mappings for a JAX-RS interceptor
+ * service.
+ *
+ * <p>
+ * The specified patterns are used to determine whether a request should be
+ * mapped to the interceptor. Interceptor services without this service
+ * property are ignored.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String},
+ * {@code String[]}, or {@code Collection<String>}.
+ */
+ public static final String JAX_RS_INTERCEPTOR_BASE = "osgi.jaxrs.interceptor.base";
+
+ /**
+ * Service property specifying the target filter to select the JAX-RS
+ * Whiteboard implementation to process the service.
+ *
+ * <p>
+ * A JAX-RS Whiteboard implementation can define any number of service
+ * properties which can be referenced by the target filter. The service
+ * properties should always include the
+ * {@link JaxRSServiceRuntimeConstants#JAX_RS_SERVICE_ENDPOINT
+ * osgi.http.endpoint} service property if the endpoint information is
+ * known.
+ *
+ * <p>
+ * If this service property is not specified, then all JAX-RS Whiteboard
+ * implementations can process the service.
+ *
+ * <p>
+ * The value of this service property must be of type {@code String} and be
+ * a valid {@link Filter filter string}.
+ */
+ public static final String JAX_RS_WHITEBOARD_TARGET = "osgi.jaxrs.whiteboard.target";
+}
diff --git a/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/package-info.java b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/package-info.java
new file mode 100644
index 0000000..f4cf6e5
--- /dev/null
+++ b/org.osgi.service.jaxrs.whiteboard/src/main/java/org/osgi/service/jaxrs/whiteboard/package-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2015). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Http Whiteboard Package Version 1.0.
+ *
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ *
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.whiteboard; version="[1.0,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code Import-Package: org.osgi.service.http.whiteboard; version="[1.0,1.1)"}
+ *
+ * @author $Id: 161afdd2706c206890d3361d6dc4030ac4a449e9 $
+ */
+
+@Version("1.0")
+package org.osgi.service.jaxrs.whiteboard;
+
+import org.osgi.annotation.versioning.Version;
+
diff --git a/pom.xml b/pom.xml
index bf34c51..4fd8d60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
<module>jax-rs.itests-run</module>
<module>jax-rs.example</module>
<module>jax-rs.example-run</module>
+ <module>org.osgi.service.jaxrs.whiteboard</module>
</modules>
<dependencies>
<dependency>