2016-07-15 2 views
0

나는 그들의 응답을 결합하기 위해 2 개의 다른 API를 복제하려고하는데, 항상 널 포인터 오류가 발생합니다. 처음에는이 2 개의 API를 복제하려고합니다. 귀하의 재산이 호텔로부터 값을 검색 여부를 확인하시기 바랍니다두 개의 다른 api에서 wso2 복제

[2016-07-15 13:57:34,106] ERROR - PassThroughHttpSender Failed to submit the response 
java.lang.NullPointerException 
    at org.apache.synapse.transport.passthru.util.SourceResponseFactory.create(SourceResponseFactory.java:67) 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:463) 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264) 
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 
    at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212) 
    at org.apache.synapse.rest.Resource.process(Resource.java:348) 
    at org.apache.synapse.rest.API.process(API.java:336) 
    at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:120) 
    at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:100) 
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:55) 
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:541) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:179) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:252) 
    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) 
[2016-07-15 13:57:34,121] ERROR - Axis2Sender Access-Control-Allow-Origin:*,Cache-Control:public, max-age=28800,Content-Type:application/json;charset=utf-8,ETag:"37a6259cc0c1dae299a7866489dff0bd",Status:404 Not Found,X-Memc:MISS,X-Memc-Age:0,X-Memc-Expires:28800,X-Memc-Key:d0c5ca8e07e81f5246e96c9e4bd54753,X-RateLimit-Limit:40,X-RateLimit-Remaining:39,X-RateLimit-Reset:1468562263,<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back 
org.apache.axis2.AxisFault: Failed to submit the response 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:613) 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:266) 
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 
    at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212) 
    at org.apache.synapse.rest.Resource.process(Resource.java:348) 
    at org.apache.synapse.rest.API.process(API.java:336) 
    at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:120) 
    at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:100) 
    at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:55) 
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:541) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:179) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:252) 
    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: java.lang.NullPointerException 
    at org.apache.synapse.transport.passthru.util.SourceResponseFactory.create(SourceResponseFactory.java:67) 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:463) 
    at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264) 
    ... 16 more 
[2016-07-15 13:57:34,124] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:f814f333-463b-4f51-89f1-2c361d7c55ae, Direction: response, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Access-Control-Allow-Origin:*,Cache-Control:public, max-age=28800,Content-Type:application/json;charset=utf-8,ETag:"37a6259cc0c1dae299a7866489dff0bd",Status:404 Not Found,X-Memc:MISS,X-Memc-Age:0,X-Memc-Expires:28800,X-Memc-Key:d0c5ca8e07e81f5246e96c9e4bd54753,X-RateLimit-Limit:40,X-RateLimit-Remaining:39,X-RateLimit-Reset:1468562263,<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back, Payload: {"status_code":34,"status_message":"The resource you requested could not be found."} 

답변

0

<?xml version="1.0" encoding="UTF-8"?> 
<api context="/movieapi" name="movieapi" xmlns="http://ws.apache.org/ns/synapse"> 
    <resource methods="GET" uri-template="/movie/{imdbId}"> 
     <inSequence> 
      <property expression="get-property('uri.var.imdbId')" name="uri.var.imdbId" scope="default" type="STRING"/> 
      <clone> 
       <target> 
        <endpoint> 
         <address trace="disable" uri="https://api.themoviedb.org/3/movie/{uri.var.imdbId}?api_key=code&amp;append_to_response=casts,images"/> 
        </endpoint> 
       </target> 
       <target> 
        <endpoint> 
         <address trace="disable" uri="http://www.omdbapi.com/?type=movie&amp;i={uri.var.imdbId}"/> 
        </endpoint> 
       </target> 
      </clone> 
     </inSequence> 
    </resource> 
</api> 

여기 wso2esb 버전 5 베타에서 내 오류입니다. 이를 위해 다음과 같이 로그 조정자를 사용하십시오.

<log level="full"> 
<property expression="get-property('uri.var.imdbId')" name="uri.var.imdbId" scope="default" type="STRING"/> 
</log> 

그런 다음 문제가 검색됩니다.

문제는 응답 제출에 관한 것입니다. 귀하의 구성에 따라 응답을 수집하기 위해 총체적 중재자를 추가하지 않았습니다 [1]. 추가하고 테스트하십시오.

여기에 샘플 시나리오를 추가합니다. SimpleStockQuote 서비스 [2] 인스턴스를 2 개 시작하고 SOAPUI를 통해 프록시에 메시지를 게시하면됩니다.

<proxy name="ScatterGatherProxy" startOnLoad="true" trace="disable" transports="https http"> 
<description/> 
<target> 
    <inSequence> 
     <clone> 
      <target> 
       <sequence> 
        <send> 
         <endpoint name="vendorA"> 
          <address uri="http://localhost:9001/services/SimpleStockQuoteService/"/> 
         </endpoint> 
        </send> 
       </sequence> 
      </target> 
      <target> 
       <sequence> 
        <send> 
         <endpoint name="vendorB"> 
          <address uri="http://localhost:9002/services/SimpleStockQuoteService/"/> 
         </endpoint> 
        </send> 
       </sequence> 
      </target> 
     </clone> 
    </inSequence> 
    <outSequence> 
     <log level="full"/> 
     <aggregate> 
      <completeCondition> 
       <messageCount min="2"/> 
      </completeCondition> 
      <onComplete expression="//m0:return" 
       xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"> 
       <enrich> 
        <source clone="true" xpath="//m0:return[not(preceding-sibling::m0:return/m1:last &lt;= m1:last) and not(following-sibling::m0:return/m1:last &lt; m1:last)]"/> 
        <target type="body"/> 
       </enrich> 
       <send/> 
      </onComplete> 
     </aggregate> 
    </outSequence> 
</target> 

[1] https://docs.wso2.com/display/ESB490/Aggregate+Mediator

[2] https://docs.wso2.com/display/ESB490/Setting+Up+the+ESB+Samples#Starting%20the%20Axis2%20server

+0

는 속성의 값을 검색한다. '[2016-07-15 14 : 17 : 40,029] 정보 - LogMediator 대상 :/movieapi/movie/tt0918940, 메시지 ID : urn : uuid : be033ca6-0430-4284-9942-569d65fe8f87, 방향 : 요청, uri.var. imdbId = tt0918940, 봉투 : ' –

+1

오류가 응답을 제출하지 못했습니다. 응답을 받기 위해 중재자를 두지 않았습니다. 엔드 포인트에서 응답을 얻으려면 집계 조정자를 추가해야합니다. –

+0

내 대답이 참조로 변경되었습니다. –

관련 문제