Полезная нагрузка Xtify — ошибка сервера

Я пытаюсь отправить push-уведомление как на Android, так и на iOS, используя xtify. Я могу это сделать, однако информация о полезной нагрузке, похоже, не работает для меня. Если я удалю полезную нагрузку, запрос будет успешным, но добавление полезной нагрузки вызовет ошибку сервера. Может ли кто-нибудь посмотреть на json, который я отправляю, и сказать мне, что я делаю что-то не так?

{
   "apiKey":"...",
   "appKey":"...",
   "xids":[
      "..."
   ],
   "content":{
      "subject":"chat from billy bob",
      "message":"hey",
      "payload":{
         "UserId":"1",
         "DeviceId":"9"
      }
   }
}

Вот ошибка, которую возвращает сервер: HTTP/1.1 500 Internal Server Error Дата: среда, 30 мая 2012 г., 22:51:51 GMT Content-Type: text/html;charset=utf-8 Content-Length: 5839 Connection: close

JBoss Web/2.1.3.GA - Error report

HTTP-статус 500 —

type Exception report

сообщение

описание Сервер обнаружил внутреннюю ошибку (), которая не позволила ему выполнить этот запрос.

exception

javax.servlet.ServletException: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: org.apache.catalina.connector.CoyoteInputStream@210c8d4e; line: 1, column: 199] (through reference chain: com.xtify.api.entities.PushRequest["content"]->com.xtify.api.entities.Content["payload"])
       com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:418)
       com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
       com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
       javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: org.apache.catalina.connector.CoyoteInputStream@210c8d4e; line: 1, column: 199] (through reference chain: com.xtify.api.entities.PushRequest["content"]->com.xtify.api.entities.Content["payload"])
       org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
       org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:219)
       org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:44)
       org.codehaus.jackson.map.deser.std.StringDeserializer.deserialize(StringDeserializer.java:13)
       org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
       org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
       org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
       org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
       org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
       org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414)
       org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
       org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
       org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704)
       org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315)
       org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)
       com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy.readFrom(JacksonProviderProxy.java:139)
       com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474)
       com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
       com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
       com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
       com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:203)
       com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
       com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
       com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
       com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
       com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
       com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1483)
       com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1414)
       com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363)
       com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353)
       com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
       com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
       com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708)
       javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

примечание Полная трассировка стека основной причины доступна в журналах JBoss Web/2.1.3.GA.

JBoss Web/2.1.3.GA


person tboling1    schedule 30.05.2012    source источник


Ответы (1)


Тип элемента — JSON, а не массив. Таким образом, элемент полезной нагрузки должен выглядеть так:

"полезная нагрузка": "{ 'ключ1' : 'значение1', 'ключ2' : 'значение2'} "

Попробуйте и дайте мне знать, как это работает.

Майкл

person Michael Bordash    schedule 31.05.2012
comment
Привет, Майкл. Это сработало хорошо. На андроиде все работает. Тем не менее, у нас все еще есть проблема с iphone. Наш словарь userInfo, который передается с didReceiveRemoteNotification, не содержит данных полезной нагрузки. Можно ли отправлять данные полезной нагрузки на iPhone? Есть ли что-то особенное, что нам нужно сделать, чтобы получить его? Еще раз спасибо за помощь - person tboling1; 01.06.2012
comment
Хммм... надо посмотреть повнимательнее. При первом тесте я также не получил полезную нагрузку в своем тестовом приложении для iphone. - person Michael Bordash; 03.06.2012
comment
Привет, полезная нагрузка действительна только для c2dm. Для iOS вы можете отправить пользовательский json через значение данных в поддокументе действия. Я позабочусь о том, чтобы документация была понятной на нашем портале разработки. - person Michael Bordash; 05.06.2012
comment
Привет, Майкл, сервер xtify принял вызов, но в нашем словаре для didReceiveNotification до сих пор нет пользовательских данных. Вот json, который мы отправляем. Я предполагаю, что это то, что вы имели в виду под значением данных в поддокументе действия? Есть идеи? { apiKey:..., appKey:..., xids:[ .. ], content:{ subject:Chat From, message:Давай, сделай мой день., action:{data:{\UserId\:\1 \,\DeviceId\:\9\,\Message\:\hey\} }, payload:null } Спасибо за помощь. - person tboling1; 05.06.2012
comment
Документы были обновлены и теперь гораздо полезнее. Спасибо. Мне также пришлось указать пользовательский тип для своего действия. После этого измените все, начиная работать. Спасибо за вашу помощь. - person tboling1; 05.06.2012