Reputation: 4490
I have implemented following APIS using CXF REST Service and Apache Camel.
Both these APIs are of POST
type, and will accept json
input.
json
object and perform some actions on that, and will return updated json
.json
array of objects of previous type and call first API for each object in array.Here you can find my camel route for second 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>
Unfortunately, I am getting an error while calling the first API inside the camel route shared here.
The stack trace is as follows:
Failed delivery for (MessageId: ID-localhost-35741-1477139495717-17-3 on ExchangeId: ID-localhost-35741-1477139495717-17-4). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: Invalid uri: /api/listAction/api/listAction. If you are forwarding/bridging http endpoints, then enable the bridgeEndpoint option on the endpoint: Endpoint[http://localhost:9090/api/compute]
Message History --------------------------------------------------------------------------------------------------------------------------------------- RouteId ProcessorId Processor
Elapsed (ms) [listActionRoute ] [listActionRoute ] [direct-vm://listAction-service
] [ 957] [demoRoute ] [log39 ] [log
] [ 70] [demoRoute ] [recipientList17 ] [recipientList[simple{direct-vm:${header.operationName}-service}]
] [ 887] [listActionRoute ] [log35 ] [log
] [ 846] [listActionRoute ] [setBody15 ] [setBody[simple{${body[0]}}]
] [ 1] [listActionRoute ] [bean10 ] [bean[com.demo.service.DemoService@638f6584]
] [ 12] [listActionRoute ] [loop8 ] [loop[simple{${body.size}}]
] [ 23] [listActionRoute ] [log36 ] [log
] [ 1] [listActionRoute ] [setBody16 ] [setBody[simple{${body[${property.CamelLoopIndex}]}}]
] [ 2] [listActionRoute ] [log37 ] [log
] [ 1] [listActionRoute ] [marshal17 ] [marshal[org.apache.camel.model.dataformat.JsonDataFormat@74104d19]
] [ 2] [listActionRoute ] [setHeader26 ] [setHeader[CamelHttpMethod]
] [ 1] [listActionRoute ] [recipientList16 ] [recipientList[simple{http://localhost:9090/api/compute}]
] [ 15]Exchange --------------------------------------------------------------------------------------------------------------------------------------- Exchange[ Id ID-localhost-35741-1477139495717-17-4 ExchangePattern InOut Headers
{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=public java.lang.String com.demo.endpoints.DemoResource.listAction(java.util.List), http.base.path=http://localhost:9091, HTTP.REQUEST=(POST /api/listAction)@585231269 org.eclipse.jetty.server.Request@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.Message.QUERY_STRING=null, org.apache.cxf.jaxrs.model.OperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@63dce19e], org.apache.cxf.message.Message.ENCODING=ISO-8859-1, [email protected]{,null}, Content-Type=application/json, org.apache.cxf.security.SecurityContext=org.apache.cxf.transport.http.AbstractHTTPDestination$2@7f64c12c, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.transport.http_jetty.continuations.JettyContinuationProvider@5275a1a6, org.apache.cxf.message.Message.PROTOCOL_HEADERS={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], 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.request.url=http://localhost:9091/api/listAction, Accept=text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8, org.apache.cxf.request.uri=/api/listAction, org.apache.cxf.message.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.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.String, CamelCxfRsResponseGenericType=class java.lang.String, CamelHttpCharacterEncoding=ISO-8859-1, CamelHttpMethod=POST, CamelHttpPath=/api/listAction, CamelHttpUri=/api/listAction, CamelRedelivered=false, CamelRedeliveryCounter=0, connection=keep-alive, Content-Length=120, Content-Type=application/json, Host=localhost:9091, operationName=listAction, User-Agent=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0} BodyType
byte[] Body {"name":"Mr XYZ Mr","salary":100.0} ]Stacktrace
java.lang.IllegalArgumentException: Invalid uri: /api/listAction/api/listAction. If you are forwarding/bridging http endpoints, then enable the bridgeEndpoint option on the endpoint: Endpoint[http://localhost:9090/api/compute]
Can anyone help me to understand, why am I getting this error and how to resolve this issue?
Upvotes: 0
Views: 3017
Reputation: 3191
I think the headers are getting mixed up. I think you can solve it by clearing the headers something similar to .removeHeaders("*")
between each call.
Upvotes: 4