【问题标题】:WSO2AM log mediator exception in rest service休息服务中的 WSO2AM 日志调解器异常
【发布时间】:2016-07-12 18:04:25
【问题描述】:

我使用全局传出日志调解器,以便在调用 Web 服务时获取完整的日志消息。 当客户端使用 SOAP Web 服务时,一切都井井有条。 当客户端调用 REST Web 服务时,发生异常,响应为运行时错误。

除了为每个服务而不是全局设置中介之外,我能做些什么吗?

这是中介定义

<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--Out">
<log level="full">
    <property name="ParentID:" expression="get-property('parentID')"/>
    <property name="ActualRemoteAddress:" expression="get-property('client')"/>
    <property name="AuthHeader:" expression="get-property('AuthHeader')"/>
</log>

这是异常的开始

    ERROR - RelayUtils Error while building Passthrough stream
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,11]
Message: Not in an object
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
    at org.apache.axiom.om.impl.llom.OMDocumentImpl.getOMDocumentElement(OMDocumentImpl.java:109)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:570)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:566)
    at org.apache.synapse.commons.json.JsonUtil.toXml(JsonUtil.java:278)
    at org.apache.synapse.commons.json.JsonBuilder.processDocument(JsonBuilder.java:35)
    at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:138)
    at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:135)
    at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:100)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:155)
    at org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler.mediate(APIManagerExtensionHandler.java:56)
    at org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler.handleResponse(APIManagerExtensionHandler.java:85)
    at org.apache.synapse.rest.API.process(API.java:320)
    at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:86)
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:52)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:295)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:529)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:172)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:251)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,11]
Message: Not in an object
    at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.hasNext(AbstractXMLStreamReader.java:449)
    at org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.next(AbstractXMLStreamReader.java:456)
    at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
    ... 25 more

【问题讨论】:

  • 您可以激活有线日志并使用新日志更新您的问题吗?
  • 这是启用了线路和标头日志的输出dropbox.com/s/r7oeodwjawhehwu/wire.log
  • 当您使用休息客户端调用服务时,错误是由于这一行:[2016-05-09 16:49:56,437] DEBUG - wire >> ""Hello, me"" you没有发送 xml 对象,只是一个文本....当您使用 soapclient 比较两条消息时尝试捕获相同的消息
  • 我不明白为什么必须发送一个 xml 对象。当我创建肥皂网络服务时,我选择使用 xml 对象进行回复。当我创建休息服务时,我选择使用 json 对象进行回复。它应该是有效的。如果没有,是否有办法区分中介,仅适用于 SOAP Web 服务?

标签: wso2 wso2-am


【解决方案1】:

当您使用内容感知中介器(例如 logmediator)时,网关会将有效负载构建为肥皂格式。这是由axis2.xml 中定义的消息构建器完成的。根据有效载荷的内容类型,将选择正确的消息构建器。

在您的有线日志中,网关从后端获取内容类型为 -application/json 的有效负载。但是 payload("Hello, me") 不是实际的 json 格式。因此与之相关的构建器无法解析有效负载

[2016-05-09 16:49:56,433] DEBUG - wire >> "HTTP/1.1 200 OK[\r][\n]"
[2016-05-09 16:49:56,433] DEBUG - wire >> "Date: Mon, 09 May 2016 13:48:10 GMT[\r][\n]"
[2016-05-09 16:49:56,433] DEBUG - wire >> "Server: Apache/2.4.7 (Ubuntu)[\r][\n]"
[2016-05-09 16:49:56,433] DEBUG - wire >> "X-Powered-By: PHP/5.5.9-1ubuntu4.16[\r][\n]"
[2016-05-09 16:49:56,435] DEBUG - wire >> "Content-Length: 11[\r][\n]"
[2016-05-09 16:49:56,435] DEBUG - wire >> "Keep-Alive: timeout=5, max=100[\r][\n]"
[2016-05-09 16:49:56,435] DEBUG - wire >> "Connection: Keep-Alive[\r][\n]"
[2016-05-09 16:49:56,435] DEBUG - wire >> **"Content-Type: application/json**[\r][\n]"
[2016-05-09 16:49:56,435] DEBUG - wire >> "[\r][\n]"
[2016-05-09 16:49:56,437] DEBUG - wire >> **""Hello, me""**

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多