CXF & Camel: не поддерживает List <Object>в качестве параметра веб-службы - PullRequest
0 голосов
/ 25 мая 2018

Я использую JBoss Fuse 6.3 для разработки веб-сервиса с использованием компонентов Camel и CXF (2.17.0).Я также использую подход «сначала код».Я считаю, что все идет хорошо с простым объектом в качестве параметра (метод doSomething), но не работает со списком объектов в качестве параметра (метод обновления).Вот результаты:

@WebService
public java.util.List<ObjectResponse> update(
    java.util.List<ObjectRequest> arg0
);
public ObjectResponse doSomething(
    Object parameter
);

Когда arg0 содержит только один элемент (ObjectRequest), он не выдает ошибку, однако запрос веб-службы не имеет содержимого:

Когда arg0 имеет два элемента, он выдает следующую ошибку:

java.lang.IllegalArgumentException: Получить неправильный размер параметра для вызова службы out, Ожидайте размер 1, Размер параметра 2. Пожалуйста, проверьтеесли тело сообщения соответствует запросу CXFEndpoint POJO Dataformat.в org.apache.camel.component.cxf.CxfProducer.checkParameterSize (CxfProducer.java:272) [241: org.apache.camel.camel-cxf: 2.17.0.redhat-630187] в org.apache.camel.component.cxf.CxfProducer.getParams (CxfProducer.java:310) [241: org.apache.camel.camel-cxf: 2.17.0.redhat-630187] в org.apache.camel.component.cxf.CxfProducer.process (CxfProducer.java: 120) [241: org.apache.camel.camel-cxf: 2.17.0.redhat-630187] в org.apache.camel.processor.SendProcessor.process (SendProcessor.java:145) [232: орг.apache.camel.camel-ядро: 2.17.0.redhat-630187]

1 Ответ

0 голосов
/ 26 мая 2018

Решение заключается в том, чтобы при установке тела обмена обернуть список вокруг массива объектов, как показано ниже

java.util.List arg0 = new ArrayList ();

ObjectRequest obj1; // необходимо инициализировать

ObjectRequest obj2; // необходимо инициализировать

arg0.add (obj1);

arg0.add (obj2);

exchange.getIn (). SetBody (new Object [] {arg0});

...