diff --git a/adapter/adapter-service/src/main/scala/net/shrine/adapter/Adapter.scala b/adapter/adapter-service/src/main/scala/net/shrine/adapter/Adapter.scala index 8430355fc..a5522fdaa 100644 --- a/adapter/adapter-service/src/main/scala/net/shrine/adapter/Adapter.scala +++ b/adapter/adapter-service/src/main/scala/net/shrine/adapter/Adapter.scala @@ -1,74 +1,77 @@ package net.shrine.adapter import net.shrine.log.Loggable import net.shrine.problem.{Problem, ProblemNotInCodec, LoggingProblemHandler, ProblemSources, AbstractProblem} import net.shrine.protocol.{ShrineRequest, BroadcastMessage, ErrorResponse, ShrineResponse, BaseShrineResponse, AuthenticationInfo} import net.shrine.serialization.XmlMarshaller import net.shrine.util.StackTrace /** * @author Bill Simons * @since 4/8/11 * @see http://cbmi.med.harvard.edu * @see http://chip.org *

* NOTICE: This software comes with NO guarantees whatsoever and is * licensed as Lgpl Open Source * @see http://www.gnu.org/licenses/lgpl.html */ abstract class Adapter extends Loggable { final def perform(message: BroadcastMessage): BaseShrineResponse = { def problemToErrorResponse(problem:Problem):ErrorResponse = { LoggingProblemHandler.handleProblem(problem) ErrorResponse(problem) } val shrineResponse = try { processRequest(message) } catch { case e: AdapterLockoutException => { problemToErrorResponse(AdapterLockout(message.request.authn,e)) } case e @ CrcInvocationException(invokedCrcUrl, request, cause) => { problemToErrorResponse(CrcCouldNotBeInvoked(invokedCrcUrl,request,e)) } case e: AdapterMappingException => { problemToErrorResponse(AdapterMappingProblem(e)) } case e: Exception => { val summary = if(message == null) "Unknown problem in Adapter.perform with null BroadcastMessage" else s"Unexpected exception in Adapter" problemToErrorResponse(ProblemNotInCodec(summary,e)) } } shrineResponse } protected[adapter] def processRequest(message: BroadcastMessage): BaseShrineResponse //NOOP, may be overridden by subclasses def shutdown(): Unit = () } case class AdapterLockout(authn:AuthenticationInfo,x:AdapterLockoutException) extends AbstractProblem(ProblemSources.Hub) { override def summary: String = s"User '${authn.domain}:${authn.username}' is locked out" override def throwable = Some(x) } case class CrcCouldNotBeInvoked(crcUrl:String,request:ShrineRequest,x:CrcInvocationException) extends AbstractProblem(ProblemSources.Hub) { override def summary: String = s"Error invoking the CRC at '$crcUrl' with request $request ." override def throwable = Some(x) } case class AdapterMappingProblem(x:AdapterMappingException) extends AbstractProblem(ProblemSources.Hub) { - override def summary: String = s"Error mapping query terms: ${x.getMessage}" + + override def summary: String = s"Error mapping query terms on ${stamp.host}: ${x.getMessage}" + + override def description = s"${super.description} ${x.getMessage}" override def throwable = Some(x) } case class ExceptionInAdapter() \ No newline at end of file diff --git a/adapter/adapter-service/src/main/scala/net/shrine/adapter/AdapterMappingException.scala b/adapter/adapter-service/src/main/scala/net/shrine/adapter/AdapterMappingException.scala index 811a3ef67..c72cf8fef 100644 --- a/adapter/adapter-service/src/main/scala/net/shrine/adapter/AdapterMappingException.scala +++ b/adapter/adapter-service/src/main/scala/net/shrine/adapter/AdapterMappingException.scala @@ -1,15 +1,15 @@ package net.shrine.adapter /** * @author Andrew McMurry * @author clint - * @date ??? - * @date Nov 21, 2012 (Scala port) + * @since ??? + * @since Nov 21, 2012 (Scala port) */ final class AdapterMappingException(message: String, cause: Throwable) extends AdapterException(message, cause) { def this() = this("", null) def this(message: String) = this(message, null) def this(cause: Throwable) = this("", cause) } diff --git a/apps/shrine-app/src/main/scala/net/shrine/jersey/DefaultShrineResourceConfig.scala b/apps/shrine-app/src/main/scala/net/shrine/jersey/DefaultShrineResourceConfig.scala index b75e794c3..4dc627f71 100644 --- a/apps/shrine-app/src/main/scala/net/shrine/jersey/DefaultShrineResourceConfig.scala +++ b/apps/shrine-app/src/main/scala/net/shrine/jersey/DefaultShrineResourceConfig.scala @@ -1,11 +1,11 @@ package net.shrine.jersey import net.shrine.wiring.ManuallyWiredShrineJaxrsResources /** * @author clint - * @date Jan 16, 2014 + * @since Jan 16, 2014 * * Default (non-HMS) Shrine "entry point" for Jersey. */ final class DefaultShrineResourceConfig extends ShrineResourceConfig(new ManuallyWiredShrineJaxrsResources) \ No newline at end of file diff --git a/apps/shrine-app/src/main/scala/net/shrine/jersey/ShrineResourceConfig.scala b/apps/shrine-app/src/main/scala/net/shrine/jersey/ShrineResourceConfig.scala index 31102d97c..c33030662 100644 --- a/apps/shrine-app/src/main/scala/net/shrine/jersey/ShrineResourceConfig.scala +++ b/apps/shrine-app/src/main/scala/net/shrine/jersey/ShrineResourceConfig.scala @@ -1,18 +1,18 @@ package net.shrine.jersey import com.sun.jersey.api.core.DefaultResourceConfig import net.shrine.wiring.ShrineJaxrsResources /** * @author clint - * @date Jan 14, 2014 + * @since Jan 14, 2014 * * Base class for Jersey "entry points". When given a source of Shrine JAX-RS resource class instances, this * class registers them in such a way that Jersey can expose them. */ abstract class ShrineResourceConfig(jaxrsResources: ShrineJaxrsResources) extends DefaultResourceConfig { //NB: Passing an instance of a class annotated with @Path or other JAX-RS annotations to //getSingletons().add() makes Jersey expose that instance as a JAX-RS resource. This //allows us to do our own wiring. jaxrsResources.resources.foreach(getSingletons.add) } \ No newline at end of file