2017-03-22 1 views
0

In letzter Zeit hat jeder Versuch, API-Ressourcen auf meinem ESB aufzurufen, zu einer XML-Ausnahme (Stack-Trace unten) geführt, wenn diese von der Datei payloadFactory ausgeführt wird. Das Entfernen der PayloadFactory in seiner Gesamtheit scheint die einzige Möglichkeit zu sein, dies zu beheben. Ich kann keine Argumente, leeres Format oder komplett statische Argumente und Formate haben, die funktionieren sollten und gestern funktioniert haben!WSO2 ESB-Nutzlast-Factory XML-Ausnahme

Der Build ist auf ESB 5.0.0 und ein Beispiel für eine Ressource so sieht wie folgt aus:

<resource methods="POST" uri-template="/someUrl"> 
    <inSequence> 
     <property name="acceptedRoles" value="RMD" scope="default" type="STRING/> 
     <property name="myProp" value="json-eval($)" scope="default" type="STRING"/> 
     <Package.ConnectorOne/> 
     <Package.ConnectorTwo/> 
     <loopback/> 
    </inSequence> 
    <outSequence> 
     <payloadFactory media-type="json"> 
      <format>{"statusCode":$1,"errorMessage":"$2","errors":$3}</format> 
      <args> 
       <arg evaluator="xml" expression="get-property('statusCode')/> 
       <arg evaluator="xml" expression="get-property('errorMessage')/> 
       <arg evaluator="xml" expression="get-property('errors')/> 
      </args> 
     <payloadFactory> 
     <send/> 
    </outSequence> 
    <faultSequence/> 
</resource> 

Exception Stack-Traces:

TID[-1234] [ESB] [2017-03-21 19:22:33,024] ERROR 
{API_LOGGER.FleetManagement} - javax.xml.stream.XMLStreamException: 
Unexpected symbol: START_OBJECT 
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 
org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653 
) 
org.apache.axiom.om.impl.llom.OMSourcedElementImpl.buildNext(OMSourcedElemen 
tImpl.java:880) 
org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:12 
2) 
org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.j 
ava:343) 
org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenI 
terator.java:36) 
org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractItera 
tor.java:58) 
org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:41 
8) 
org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:42 
5) 
org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:587 
) 
org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:654 
) 
org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(Payloa 
dFactoryMediator.java:173) 
org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(Payloa 
dFactoryMediator.java:104) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:97) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:59) 
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator. 
java:158) org.apache.synapse.rest.Resource.process(Resource.java:343) 
org.apache.synapse.rest.API.process(API.java:338) 
org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.jav 
a:123) 
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler. 
java:101) 
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:5 
6) 
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn 
apseEnvironment.java:304) 
org.apache.synapse.mediators.builtin.LoopBackMediator.mediate(LoopBackMediat 
or.java:63) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:97) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:59) 
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator. 
java:158) org.apache.synapse.rest.Resource.process(Resource.java:343) 
org.apache.synapse.rest.API.process(API.java:399) 
org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.jav 
a:123) 
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler. 
java:101) 
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:6 
9) 
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn 
apseEnvironment.java:304) 
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageR 
eceiver.java:75) 
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosing 
RESTHandler(ServerWorker.java:325) 
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingReq 
uest(ServerWorker.java:371) 
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151 
) 
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerP 
ool.java:172) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
java.lang.Thread.run(Unknown Source) 

Und

javax.xml.stream.XMLStreamException: Unexpected symbol: START_OBJECT 
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 
org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653 
) 
org.apache.axiom.om.impl.llom.OMSourcedElementImpl.buildNext(OMSourcedElemen 
tImpl.java:880) 
org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:12 
2) 
org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.j 
ava:343) 
org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenI 
terator.java:36) 
org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractItera 
tor.java:58) 
org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:41 
8) 
org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:42 
5) 
org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:587 
) 
org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:654 
) 
org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(Payloa 
dFactoryMediator.java:173) 
org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(Payloa 
dFactoryMediator.java:104) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:97) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:59) 
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator. 
java:158) org.apache.synapse.rest.Resource.process(Resource.java:343) 
org.apache.synapse.rest.API.process(API.java:338) 
org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.jav 
a:123) 
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler. 
java:101) 
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:5 
6) 
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn 
apseEnvironment.java:304) 
org.apache.synapse.mediators.builtin.LoopBackMediator.mediate(LoopBackMediat 
or.java:63) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:97) 
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediat 
or.java:59) 
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator. 
java:158) org.apache.synapse.rest.Resource.process(Resource.java:343) 
org.apache.synapse.rest.API.process(API.java:399) 
org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.jav 
a:123) 
org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler. 
java:101) 
org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:6 
9) 
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2Syn 
apseEnvironment.java:304) 
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageR 
eceiver.java:75) 
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosing 
RESTHandler(ServerWorker.java:325) 
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingReq 
uest(ServerWorker.java:371) 
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151 
) 
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerP 
ool.java:172) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
java.lang.Thread.run(Unknown Source) 

Antwort

1

I Erraten Sie das Problem ist der Ausdruck Typ in der Payload Factory Mediator beim Übergeben der Argumente an die JSON.

*<payloadFactory media-type="json"> 
      <format>{"statusCode":$1,"errorMessage":"$2","errors":$3}</format> 
      <args> 
       <***arg evaluator="xml"*** expression="get-property('statusCode')/> 
       <arg evaluator="xml" expression="get-property('errorMessage')/> 
       <arg evaluator="xml" expression="get-property('errors')/> 
      </args> 
     <payloadFactory>* 

Änderung der Wert von arg Bewerter = "xml" Ausdruck = "get-property ('status') von xml arg Bewerter =" json " Ausdruck =" get- Eigenschaft ('statusCode') json und versuchen Sie es. Ich glaube, die Ausnahme ist aufgrund der Analyse von XML als JSON.

Kommentar, wenn der Fehler nicht behoben wurde. Dank

+0

Ich werde nicht bis morgen oder Montag wieder mit meinem PC arbeiten, aber ich habe es ohne die Arg Felder versucht und das Ergebnis ist das gleiche. Ich werde es versuchen, wenn ich kann. Seltsamerweise hatte ich einen Teamkollegen bei der Arbeit, der diesen Code auf seinem Server versuchte und er sagte, es habe gut funktioniert. –

+0

Ja, das hat das Problem nicht gelöst. Danke für die Idee trotzdem. –

1

Vielleicht sind die Argumente, die Sie versuchen, in die json Nutzlast zu injizieren sind nicht entweder ein int oder ein boolean, die eine Parsing Ausnahme verursachen würde.

Try this:

<payloadFactory media-type="json"> 
      <format>{"statusCode":"$1","errorMessage":"$2","errors": "$3"}</format> 
      <args> 
       <arg evaluator="xml" expression="get-property('statusCode')/> 
       <arg evaluator="xml" expression="get-property('errorMessage')/> 
       <arg evaluator="xml" expression="get-property('errors')/> 
      </args> 
<payloadFactory> 

Um zu sehen, was im Detail während der Mediation geschieht, versuchen Sie den Synapse-Logger (org.apache.synapse) und Drahtprotokoll DEBUG Einstellung.

+0

Ich habe versucht, die Debug-Ebene wie empfohlen zu erhöhen. Ich sehe nichts darin, das hilft, aber vielleicht siehst du etwas, das ich nicht sehe. Starten, was ich denke, ist der Anfang der outSequence - auf JsonReadOnlyStream - # vermitteln zeigt meine Nutzlast als {"ASDF": "FDSA"}. Ich habe eine konstante Nutzlast Fabrik für Einfachheit - auf JsonReadOnlyStream wieder -JsonReaderDelegate setzt JsonXmlStreamReader als XMLStreamReader - # getLocalName mehrere Einträge von „alten“ hat und „neuen“ Werte gegeben werden -FAULT Sequenz beginnt –

+0

I prüfte es gegen eine Kopie von einem frisch ausgepackten ESB, das ich gerade letzte Nacht auf meinem Heim-PC installiert hatte, und fand einige oberflächliche Änderungen (Tag-Attribute haben die Reihenfolge geändert, Zeilenumbrüche hinzugefügt), aber nichts sollte die Interpretation durch den Server ändern. Sie hatten beide die gleiche Rechtschreibprüfung um die Zeile 712. Nur um sicherzustellen, dass ich nichts verpasst habe, habe ich das neuere Dokument eingesteckt und es mit den gleichen Ergebnissen ausgeführt. –

+0

Könnten Sie vielleicht Ihren aktualisierten Proxy mit den enthaltenen Logdateien für die wenigen Mediatoren einfügen, bevor der Fehler auftritt? Ich bin mir nicht sicher, was Ihre Connectors auch tun? – JavaMastaRSA