2016-09-06 3 views
3

Я использую менеджер API wso2 1.7. и необходимо опубликовать API, написанный на php. Это URL-адрес конечной точки с .php aslo. Но когда я публикую этот API и вызываю его через APIM, он никогда не дает ответа. Я заметил следующее исключение в углеродном журнале. Если я попробую напрямую с URL-адресом, API даст правильный ответ. Это запрос получения, и я передаю параметры URL.Имя API с вызовом .php из диспетчера API WSO2 ISSUE

Не могли бы вы помочь мне решить эту проблему.

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

Error Log

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

Эта ошибка приходит, когда тело содержание построено. Убедитесь, что вы устанавливаете заголовок правильного типа содержимого и убедитесь, что соответствующий Builder Message включен в axis2.xml

+0

Этот тип API является GET. Поэтому, когда мы отправляем вызов api через запрос GET, не нужно отправлять параметр заголовка в отличие от запроса PUT или POST с телом json. А также axis2.xml работает отлично, потому что все остальные мои API работают очень хорошо. Только разница здесь - это просто вызов .php-файла, который не является правильно определенным веб-сервисом –

+0

, можете ли вы поделиться ответами API? также вы можете использовать tcpmon, чтобы узнать, что вы отправляете на сервер и ответ на бэкэнд. –

0

Я думаю, что лучше, если вы можете включить журналы проволочных видеть все сообщения, проходящие через, путем включения проводных журналов, которые вы можете подтвердить при отправке вызова api через запрос GET, он работает или нет вы можете включить журналы уровня проводки. Он будет регистрировать все http-сообщения. сделать это

Раскомментируйте следующие два свойства в файле «log4j.properties», который можно найти в каталоге APIM HOME/хранилище/конф

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

Я решил эту проблему, опубликовав другой API на ESB и позвонив из ESB на этот сервер. Тогда его рабочий штраф. –

+0

Я знаю выше метод не лучшее решение. потому что он может применить другую зависимость от платформы и добавить еще некоторое время задержки даже в миллисекундах. –

Смежные вопросы