2016-09-06 113 views
3

我正在使用wso2 API管理器1.7。並需要發佈一個用PHP編寫的API。它的終點URL與.php一樣。但是,當我發佈該API並通過APIM調用它時,它從不給予任何迴應。我在碳日誌中注意到以下異常。 如果我直接使用url進行嘗試,則API會給出正確的響應。 這是一個get請求,我傳遞了url參數。從WSO2 API管理器調用.php的API名稱ISSUE

你能幫我解決這個問題嗎?內容主體是建立在

API URL : <host>/api/testApi.php 

錯誤日誌

TID: [0] [AM] TID: [0] [AM] [2016-09-06 15:43:22,016] ERROR {org.apache.synapse.transport.passthru.util.RelayUtils} - Error while building Passthrough stream {org.apache.synapse.transport.passthru.util.RelayUtils} 
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 
Message: Content is not allowed in prolog. 
     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.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:129) 
     at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:107) 
     at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:82) 
     at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:70) 
     at org.wso2.carbon.apimgt.axiata.dialog.verifier.MifeInternalAPIResponseHandler.handleResponse(MifeInternalAPIResponseHandler.java:59) 
     at org.apache.synapse.rest.API.process(API.java:282) 
     at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:83) 
     at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:51) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488) 
     at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170) 
     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
     at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:229) 
     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 
Message: Content is not allowed in prolog. 
     at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34) 
     at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225) 
     at org.apache.axiom.util.stax.dialect.SJSXPStreamReaderWrapper.next(SJSXPStreamReaderWrapper.java:138) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681) 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214) 
     ... 20 more 

回答

0

此錯誤來了。請確保您設置正確的Content-Type頭,並確保相關信息生成器在axis2.xml啓用

+0

這個API類型是GET被發現。所以當我們通過GET請求發送一個API調用時,不需要像使用JSON主體的PUT或POST請求那樣發送頭部參數。另外axis2.xml工作正常,因爲所有其他的API都運行得非常好。只有這裏的區別只是調用.php文件沒有正確定義的Web服務 –

+0

你能分享API響應嗎?你也可以使用tcpmon來查看你發送給後端和後端響應的內容。 –

0

我覺得這是更好,如果你可以讓電線日誌來查看所有已通過的消息, 通過啓用電線日誌,您可以確認何時通過GET請求發送api電話,它是否正常工作 您可以啓用電線級日誌。它會記錄所有的http消息。要做到這一點

請取消註釋按照「log4j.properties」文件兩個屬性可在APIM HOME /庫/ conf目錄

log4j.logger.org.apache.synapse.transport.http.wire=DEBUG 
+0

我通過在ESB上發佈另一個API並從ESB調用此後端來解決了此問題。那麼它的工作很好。 –

+0

我知道上面的方法不是最好的解決方案。因爲它可能會對平臺應用另一個依賴關係,即使在毫秒級時也會延長一些延遲時間。 –