GOOGLE ADS

Donnerstag, 14. April 2022

WSO2 Sequence Call Mediator akzeptiert den Inhaltstyp */* nicht

WSO2-API-Manager-Version: 2.5.0

Ich habe einen Out Mediator, der etwas sehr Einfaches tun soll:

  • Bereichern Sie eine Eigenschaft basierend auf uri.var.stackstormexecId(Arbeiten)

  • Legen Sie einen API-Schlüssel-Header fest (funktioniert)

  • Legen Sie eine Accept: */*Kopfzeile fest (funktioniert)

  • Rufen Sie (blockierend) HTTP-Endpunkt auf, der eine unstrukturierte Antwort zurückgibt (funktioniert nicht)

  • HTTP-Endpunkt aufrufen, der eine strukturierte Antwort zurückgibt (funktioniert)

  • Der Schritt 4) wird einfach durchgeführt, um die Sequenz zu blockieren, ich kümmere mich nicht um ihre Antwort. Dieser spezifische Endpunkt gibt die HTTP-Verbindung frei, wenn einige Arbeiten in Richtung Süden erledigt sind, sodass der nächste Aufruf in 5) aussagekräftige Informationen abrufen kann.

    Das Problem ist, dass Accept: */*ich durch die Einstellung erwarte, dass das API Gw die unstrukturierte Antwort des 4) Call behandelt, für den Content-Typees text/event-stream. Es löst bei diesem Aufruf eine XML-Parser-Ausnahme aus, da diesem spezifischen Inhaltstyp kein Nachrichten-Builder für axis2 zugeordnet ist.

    Frage: Weiß jemand, welche Message Builder-Klasse verwendet und in axis2.xml definiert werden sollte, um dies zu überwinden?

    Ich bin mir nicht sicher, was es zu verwenden versucht, aber die Ausnahme kommt von a getSOAPBuilder, was sicherlich nicht der Fall ist. Es erwartet ein "<", bekommt aber ein "e" (das ist das erste Zeichen der unstrukturierten Antwort von Schritt 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": "package.action", "data": "id: 5c18d85ca832cb61d235c1d4\n", "id": "5c18d860a832cb6079e87993", "execution_id": "5c18d85ba832cb61d235c1d1"}

    Mein Ziel ist einfach, diesen Endpunkt anzurufen, auf seine Antwort zu warten, die Antwort zu ignorieren und mit der Sequenz fortzufahren.

    Der Sequenzcode:

    <?xml version="1.0" encoding="UTF-8"?>
    <sequence name="someseq.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://somehost/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://somehost/v1/executions/{uri.var.stackstormexecId}"/>
    </endpoint>
    </call>
    <respond/>
    </sequence>


    Lösung des Problems

    Das Problem trat auf, weil das Content-Typeder text/event-streamAnrufantwort, was nicht standardmäßig vom WSO2 API Manager axis2 Message Builder definiert ist.

    Keine Kommentare:

    Kommentar veröffentlichen

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...