title: Can not deserialize instance of java.lang.String out of START_OBJECT token
body: <p>I'm running into an issue where my deployable jar hits an exception that doesn't happen when I run this locally in IntelliJ.  </p>
  
  <p><strong>Exception:</strong></p>
  
  <pre><code>Receiving an event {id=2, socket=0c317829-69bf-43d6-b598-7c0c550635bb, type=getDashboard, data={workstationUuid=ddec1caa-a97f-4922-833f-632da07ffc11}, reply=true}
  Firing getDashboard event to Socket#0c317829-69bf-43d6-b598-7c0c550635bb
  Failed invoking AtmosphereFramework.doCometSupport()
  java.lang.IllegalArgumentException: Can not deserialize instance of java.lang.String out of START_OBJECT token
   at [Source: N/A; line: -1, column: -1]
          at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2502)
          at org.codehaus.jackson.map.ObjectMapper.convertValue(ObjectMapper.java:2468)
          at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler$DataParam.resolve(DefaultDispatcher.java:270)
          at com.github.flowersinthesand.portal.support.DefaultDispatcher$DefaultHandler.handle(DefaultDispatcher.java:204)
          at com.github.flowersinthesand.portal.support.DefaultDispatcher.fire(DefaultDispatcher.java:107)
          at com.github.flowersinthesand.portal.support.AbstractSocketFactory.fire(AbstractSocketFactory.java:73)
          at com.github.flowersinthesand.portal.atmosphere.AtmosphereSocketFactory.onRequest(AtmosphereSocketFactory.java:75)
          at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:256)
          at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:166)
          at org.atmosphere.container.Grizzly2WebSocketSupport.service(Grizzly2WebSocketSupport.java:75)
          at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1342)
          at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:219)
          at org.atmosphere.websocket.DefaultWebSocketProcessor$2.run(DefaultWebSocketProcessor.java:183)
          at org.atmosphere.util.VoidExecutorService.execute(VoidExecutorService.java:101)
          at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:178)
          at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:167)
          at org.atmosphere.container.Grizzly2WebSocketSupport$Grizzly2WebSocketApplication.onMessage(Grizzly2WebSocketSupport.java:171)
          at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:164)
          at org.glassfish.grizzly.websockets.frametypes.TextFrameType.respond(TextFrameType.java:70)
          at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
          at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
          at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
          at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
          at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
          at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
          at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
          at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
          at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
          at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
          at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
          at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
          at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
          at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:551)
          at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:531)
          at java.lang.Thread.run(Thread.java:781)
  Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
   at [Source: N/A; line: -1, column: -1]
          at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
          at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:219)
          at org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:44)
          at org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:13)
          at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
          at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315)
          at org.codehaus.jackson.map.ObjectMapper._convert(ObjectMapper.java:2498)
          ... 34 more
  java.lang.IllegalArgumentException: Can not deserialize instance of java.lang.String out of START_OBJECT token
   at [Source: N/A; line: -1, column: -1] Status 500 Message Server Error
  </code></pre>
  
  <p><strong>Socket Handler</strong></p>
  
  <p>I believe the exception is occurring when the JSON is parsed into a WorkstationRequest object because of the below item.  This is the socket handler:</p>
  
  <pre><code>@On
  @Reply
  @JsonView({Views.WorkstationView.class})
  public WorkstationDashboard getDashboard(@Data WorkstationRequest request) {
      return new WorkstationDashboard(request.getWorkstation());
  }
  </code></pre>
  
  <p>The object the socket handler maps to:</p>
  
  <pre><code>public class WorkstationRequest {
  
      /* Class to instantiate if this workstation does not already exist */
      private Class&lt;? extends Workstation&gt; workstationClass;
  
      private WorkflowProcess workflowProcess;
  
      private PhysicalWorkstation workstation;
  
      WorkstationService workstationService;
  
      /**
       * @param workstationClass Required so when jackson maps the UUID we can auto fetch the class
       */
      public WorkstationRequest(Class&lt;? extends Workstation&gt; workstationClass) {
          this.workstationClass = workstationClass;
          workstationService = (WorkstationService) ApplicationContextProvider.getApplicationContext().getBean("workstationService");
      }
  
      /* Set the workstation based on UUID.  Will register the workstation if it's new */
      @JsonProperty("workstationUuid")
      public void setWorkstation(String workstationUUID) {
          workstation = (PhysicalWorkstation)WorkstationService.getWorkstation(workstationUUID);
  
          //setup new workstation
          if (workstation == null) {
              WorkstationEntity workstationEntity = workstationService.findByUUID(workstationUUID);
              workstation = (PhysicalWorkstation)Workstation.factory(workstationEntity, workstationClass);
  
              //register with queue
              WorkflowProcessService.getWorkflowProcess(workstation).registerWorkstation(workstation);
          }
      }
  
      public PhysicalWorkstation getWorkstation() {
          return workstation;
      }
  }
  </code></pre>
  
  <p>The JSON being mapped:</p>
  
  <pre><code>{"id":2,"socket":"0c317829-69bf-43d6-b598-7c0c550635bb","type":"getDashboard","data":{"workstationUuid":"ddec1caa-a97f-4922-833f-632da07ffc11"},"reply":true}
  </code></pre>
  
  <p><strong>WorkstationDashboard.java</strong></p>
  
  <pre><code>public class WorkstationDashboard {
      private HashMap&lt;String, Object&gt; queue = new HashMap&lt;String, Object&gt;();
  
      private LinkedBlockingDeque&lt;JobSetEntity&gt; currentWork;
  
      public WorkstationDashboard() {
          queue.put("size", 0);
      }
  
      public WorkstationDashboard(Workstation workstation) {
          fromWorkstation(workstation);
      }
  
      /* Populate dashboard data from a workstation */
      public void fromWorkstation(Workstation workstation) {
          WorkflowProcess workflowProcess = WorkflowProcessService.getWorkflowProcess(workstation);
  
          setCurrentWork(workstation.getCurrentWork());
          setQueueSize(workflowProcess.getQueue().size());
      }
  
      public void setQueueSize(Integer queueSize) {
          queue.put("size", queueSize);
      }
  
      public HashMap&lt;String, Object&gt; getQueue() {
          return queue;
      }
  
      public LinkedBlockingDeque&lt;JobSetEntity&gt; getCurrentWork() {
          return currentWork;
      }
  
      public void setCurrentWork(LinkedBlockingDeque&lt;JobSetEntity&gt; currentWork) {
          this.currentWork = currentWork;
      }
  }
  </code></pre>
  
  <p>I'm at quite a loss as to how to begin debugging this.  The stack trace never touches my application.  I'm using <code>Maven -&gt; Package</code> to deploy my .jar and executing it with <code>java -jar /path-to-jar.jar</code></p>
  
  <p><strong>Update:</strong> To prevent this question from being incredibly long, I've included my pom.xml here: <a href="http://pastebin.com/1ZUtKCfE">http://pastebin.com/1ZUtKCfE</a>.  I believe this is a dependency issue since the error only occurs on my deployable jar and not on my local PC.</p>