#web-services #rest #apache-camel #jbossfuse
#веб-сервисы #rest #apache-camel #jbossfuse
Вопрос:
Я реализовал следующие API с использованием CXF REST Service и Apache Camel.
Оба этих API имеют POST
тип и будут принимать json
входные данные.
- Первый API примет один
json
объект и выполнит с ним некоторые действия, а затем вернет обновленныйjson
. - Предполагается, что второй API принимает
json
массив объектов предыдущего типа и вызывает первый API для каждого объекта в массиве.
Здесь вы можете найти мой маршрут camel для второго API.
<route id="listActionRoute" customId="true" startupOrder="1">
<from uri="direct-vm:listAction-service"/>
<log message="Mapping done ${body[0]} ${body[0].size}"/>
<setBody>
<simple>${body[0]}</simple>
</setBody>
<loop copy="true">
<simple>${body.size}</simple>
<setBody>
<simple>${body[${property.CamelLoopIndex}]}</simple>
</setBody>
<marshal>
<json library="Jackson"/>
</marshal>
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<recipientList>
<simple>http://localhost:9090/api/compute</simple>
</recipientList>
<log message="Response is ${body}"/>
</loop>
<marshal>
<json library="Jackson"/>
</marshal>
<setHeader headerName="CamelCxfRsUsingHttpAPI">
<constant>TRUE</constant>
</setHeader>
<setHeader headerName="Accept">
<constant>application/json</constant>
</setHeader>
</route>
К сожалению, я получаю сообщение об ошибке при вызове первого API внутри общего здесь маршрута camel.
Трассировка стека выглядит следующим образом:
Сбой доставки для (MessageId: ID-localhost-35741-1477139495717-17-3 на ExchangeId: ID-localhost-35741-1477139495717-17-4). Исчерпано после попытки доставки: 1 пойманный: java.lang.Исключение IllegalArgumentException: Недопустимый uri: /api/listAction/api/listAction. Если вы пересылаете / соединяете конечные точки http, затем включите параметр bridgeEndpoint на конечной точке: Endpoint[http://localhost:9090/api/compute ]
История сообщений ————————————————————————————————————————————— routeId ProcessorId Processor
Истекло (мс) [listActionRoute ] [listActionRoute ] [direct-vm://listAction-service
] [ 957] [demoRoute ] [log39 ] [log
] [ 70] [demoRoute ] [Список получателей 17 ] [Список получателей[простой{direct-vm: ${header.OperationName}-service}]
] [ 887] [ listActionRoute ] [log35 ] [журнал
] [ 846] [listActionRoute ] [setBody15 ] [setBody[простой{${body[0]}}]
] [ 1] [listActionRoute ] [bean10 ] [компонент[com.demo.service.DemoService@638f6584]
] [ 12] [listActionRoute ] [loop8 ] [цикл [простой{${body.size}}]
] [ 23] [listActionRoute ] [log36 ] [log
] [ 1] [listActionRoute ] [setBody16 ] [setBody[простой{${body[${свойство.CamelLoopIndex}]}}]
] [ 2] [listActionRoute ] [log37 ] [log
] [ 1] [listActionRoute ] [marshal17 ] [маршал[org.apache.camel.model.dataformat.формат данных.JsonDataFormat@74104d19]
] [ 2] [listActionRoute ] [setHeader26 ] [setHeader[CamelHttpMethod]
] [ 1] [listActionRoute ] [recipientList16 ] [Список получателей[простой{http://localhost:9090/api/compute }]
] [ 15]Обмен ————————————————————————————————————————————— Exchange[Идентификатор ID-localhost-35741-1477139495717-17-4 Заголовки ExchangePattern InOut
{Accept=text /html, application/xhtml xml, application/xml; q=0.9,/;q=0.8, accept-encoding=gzip, deflate, Accept-Language=en-US,en; q=0.5, breadcrumbId=ID-localhost-35741-1477139495717-18-1 , CamelAcceptContentType=text/html,application/xhtml xml, application/xml; q=0.9,/; q=0.8, CamelCxfMessage={org.apache.cxf.message.MessageFIXED_PARAMETER_ORDER=false, org.apache.cxf.resource.method=общедоступный java.lang.Строка com.demo.endpoints.DemoResource.listAction(java.util.List), http.base.path=http://localhost:9091 , HTTP.ЗАПРОС =(POST /api/listAction)@585231269 org.eclipse.jetty.server.Запрос @22e1eba5, org.apache.cxf.transport.Destination=org.apache.cxf.transport.http_jetty.JettyHTTPDestination@26de7b21, HTTP.CONFIG=null, jaxrs.template.parameters={FINAL_MATCH_GROUP=[/]}, org.apache.cxf.message.Сообщение.QUERY_STRING=null, org.apache.cxf.jaxrs.model.OperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@63dce19e], org.apache.cxf.message.Сообщение.КОДИРОВКА = ISO-8859-1, HTTP.CONTEXT=ServletContext@o.e.j.s.h.ContextHandler {,null}, Content-Type=application/json, org.apache.cxf.security.SecurityContext=org.apache.cxf.transport.http.Аннотация HTTPDESTINATION$ 2@7f64c12c, org.apache.cxf.продолжения.ContinuationProvider=org.apache.cxf.transport.http_jetty.продолжения.JettyContinuationProvider@5275a1a6, org.apache.cxf.message.Сообщение.PROTOCOL_HEADERS={Accept=[текст /html, приложение /xhtml xml, application/xml; q=0.9,/;q=0.8], accept-encoding=[gzip, deflate], Accept-Language=[en-US,en;q=0.5], connection =[keep-alive], Content-Length=[120], content-type=[application/json], Host=[localhost:9091], User-Agent=[Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 49.0) Gecko/20100101 Firefox/49.0]}, org .apache.cxf.запрос.url=http://localhost:9091/api/listAction , Принять=текст/html, приложение /xhtml xml, application/xml; q=0.9,/;q=0.8, org.apache.cxf.request.uri=/api/listAction, org.apache.cxf.message.Сообщение.PATH_INFO=/api/listAction, org.apache.cxf.transport.https.CertConstraints=null, HTTP.RESPONSE=HTTP/1.1 200, org.apache.cxf.request.method=POST, org.apache.cxf.async.post.response.dispatch=true, org.apache.cxf.message.Сообщение.IN_INTERCEPTORS=[org.apache.cxf.transport.https.CertConstraintsInterceptor@55180f7 ], HTTP_CONTEXT_MATCH_STRATEGY=stem, http.service.redirection=null, path_to_match_slash=/api/listAction, org.apache.cxf.configuration.security.AuthorizationPolicy=null}, CamelCxfRsOperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@63dce19e], CamelCxfRsResponseClass=class java.lang.Строка, CamelCxfRsResponseGenericType=class java.lang.Строка, CamelHttpCharacterEncoding=ISO-8859-1, CamelHttpMethod=POST, CamelHttpPath=/api/listAction, CamelHttpUri=/api/listAction, CamelRedelivered=false, CamelRedeliveryCounter=0, соединение = постоянно действующее, Длина содержимого =120, Тип содержимого = application / json, Хост = localhost: 9091, OperationName=listAction, User-Agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 49.0) Gecko/20100101 Firefox/49.0} Тип тела
байт[] Тело {«имя»:»Mr XYZ Mr», «зарплата»: 100.0} ]Трассировка стека
java.lang.Исключение IllegalArgumentException: недопустимый uri: /api/listAction/api/listAction. Если вы пересылаете / соединяете конечные точки http, затем включите параметр bridgeEndpoint на конечной точке: Endpoint[http://localhost:9090/api/compute ]
Кто-нибудь может помочь мне понять, почему я получаю эту ошибку и как решить эту проблему?
Ответ №1:
Я думаю, что заголовки перепутались. Я думаю, вы можете решить это, очистив заголовки, похожие на .removeHeaders("*")
, между каждым вызовом.