1
votes

WSO2 API Manager Version: 2.5.0

I have an Out Mediator that is supposed to do something very simple:

  1. Enrich a property based of uri.var.stackstormexecId (Working)
  2. Set an API Key Header (Working)
  3. Set an Accept: */* Header (Working)
  4. Call (Blocking) HTTP Endpoint that returns an unstructured response (Not Working)
  5. Call HTTP Endpoint that returns a structured response (Working)

The step 4) is done simply to block the sequence, I don't care about its response. That specific endpoint will release the HTTP connection when some southbound work is done, allowing the next Call in 5) to retrieve meaningful information.

The problem is that by setting Accept: */* I'm expecting that the API Gw will handle the unstructured response of the 4) Call, for which its Content-Type is text/event-stream. It is throwing a XML Parser Exception on that Call because there is no associated axis2 message builder associated with this specific Content-Type.

Question: Anyone knows which message builder class should be used and defined in axis2.xml to overcame this?

I'm not sure what it is trying to use, but the exception comes from a getSOAPBuilder, which is certainly not the case. It expects a "<" but gets an "e" (which is the first character of the unstructured response of step 4)):

TID: [-1234] [] [2018-12-18 11:22:08,656]  INFO {org.apache.axis2.builder.BuilderUtil} -  OMException in getSOAPBuilder {org.apache.axis2.builder.BuilderUtil}
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'e' (code 101) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
        at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
        at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
        at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:140)
        at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:658)
        at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:206)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:146)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:109)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:68)
        at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:351)
        at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:456)
        at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:227)
        at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
        at org.apache.synapse.message.senders.blocking.BlockingMsgSender.sendReceive(BlockingMsgSender.java:490)
        at org.apache.synapse.message.senders.blocking.BlockingMsgSender.send(BlockingMsgSender.java:382)
        at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:88)
        at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:85)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:511)
        at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:384)
        at org.apache.synapse.endpoints.HTTPEndpoint.send(HTTPEndpoint.java:85)
        at org.apache.synapse.mediators.builtin.CallMediator.handleBlockingCall(CallMediator.java:164)
        at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:119)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
        at org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler.mediate(APIManagerExtensionHandler.java:66)
        at org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler.handleResponse(APIManagerExtensionHandler.java:87)
        at org.apache.synapse.rest.API.process(API.java:323)
        at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:90)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:56)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:570)
        at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:193)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:263)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'e' (code 101) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]
        at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2052)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1134)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
        ... 38 more
TID: [-1234] [] [2018-12-18 11:22:08,894]  INFO {org.apache.axis2.builder.BuilderUtil} -  Remaining input stream :[event: st2.execution.output__create
data: {"timestamp": "2018-12-18T11:22:08.654318Z", "runner_ref": "local-shell-script", "output_type": "stdout", "action_ref": "nos_utils.dsi_sync", "data": "id: 5c18d85ca832cb61d235c1d4\n", "id": "5c18d860a832cb6079e87993", "execution_id": "5c18d85ba832cb61d235c1d1"}

My objective is simply to Call this endpoint, wait for it to respond, ignore the response and move on with the sequence.

The sequence code:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="dsi_sync_out.xml" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <enrich>
        <source clone="true" type="body"/>
        <target property="stackOutput" type="property"/>
    </enrich>
    <property expression="$ctx:stackOutput/id" name="uri.var.stackstormexecId" scope="default" type="STRING"/>
    <header name="St2-Api-Key" scope="transport" value="somekey"/>
    <header name="Accept" scope="transport" value="*/*"/>
    <call blocking="true">
        <endpoint>
            <http method="get" uri-template="http://10.220.7.50:9102/v1/executions/{uri.var.stackstormexecId}/output"/>
        </endpoint>
    </call>
    <header name="St2-Api-Key" scope="transport" value="somekey"/>
    <header name="Accept" scope="transport" value="application/json"/>
    <call>
        <endpoint>
            <http method="get" uri-template="http://10.220.7.50:9101/v1/executions/{uri.var.stackstormexecId}"/>
        </endpoint>
    </call>
    <respond/>
</sequence>
1
Actually, the problem is happening because the Content-Type of the call response is text/event-stream, which is not defined out of the box by WSO2 API Manager axis2 message builder.Alexandre Juma

1 Answers

0
votes

The problem was happening because the Content-Type of the call response is text/event-stream, which is not defined out of the box by WSO2 API Manager axis2 message builder.