Я пытаюсь построить маршрут Apache Camel (v2.15) для обработки запроса POST для службы REST.
Ожидаемые запросы POST будут выглядеть следующим образом (JSONArray, представляющий список JSONObjects)это все экземпляры одного заданного типа):
Content-Type:application/json;charset=UTF-8
[
{
"aaa": "TEST",
"bbb": "TEST",
"ccc": 5004000
},
{
"aaa": "TEXT",
"bbb": "TEXT",
"ccc": 5004001
},
...
]
Моя проблема состоит в том, чтобы сконфигурировать вещи для правильной несериализации тела POST ...
Вотопределение маршрута:
from("cxfrs:bean:messageServer").choice()
.when(header("operationName").isEqualTo("postJsonMessage"))
.beanRef("messageService", "postJsonMessage")
.end();
Теперь определение службы, на которое ссылается строка beanRef:
@Path("/root-path/")
public class MyService {
private final Logger logger = LoggerFactory.getLogger(MyService.class);
@POST
@Path("/message/")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public void postJsonMessage(@Body final List<CustomMessage> data) {
logger.info("body size :" + data.size());
}
}
И POJO, описывающее элементы несериализованного списка:
public class CustomMessage {
private String aaa;
private String bbb;
private int ccc;
// ...getters and setters...
}
Когда я не использую аннотацию в POJO, я получаю следующее исключение:
JAXRSUtils | 152 - org.apache.cxf.cxf-core - 3.0.6 | No message body reader has been found for class java.util.List, ContentType: application/json;charset=UTF-8
Но если я использую @ XMLRootElement в POJO, я получаю JSONисключение при разборе:
AbstractJAXBProvider | 152 - org.apache.cxf.cxf-core - 3.0.6 | javax.xml.stream.XMLStreamException: ParseError at [row,col]:[0,1] Message: A JSONObject text must begin with '{' at character 1 of [
{
"aaa": "TEST",
"bbb": "TEST",
"ccc": 5004000
},
...
Так как я могу настроить синтаксический анализатор для интерпретации опубликованных данных как JSONArray, а не как JSONObject?
Заранее спасибо за любыепомощь:)