2012-12-14 3 views
0

나는 뮬 3.2.0과 을 사용하고 있습니다. 나는 뮬 흐름 (여기에 존재하지 않음)에 soap-request를 보내는 자바 클래스에서 muleclient.send 메소드를 호출합니다. 이것은 http로 보내집니다 요청을 수신하고 프록시 패턴을 사용하여 내 db에 기록하고 Dispatcher 변환기가있는 "ServiceFlow"로 전파합니다. 하나의 객체를 전달하기 위해 MuleClient.send (String url, Object payload, Map mapProperties) 메소드 호출을 사용하는 Java 클래스 페이로드 배열의 끝점으로 이동합니다. 그런 다음 cxf : jax-ws-client에 의해 처리되고 db에 다시 기록되며 Dispatcher의 또 다른 인스턴스 (수신 페이로드가 다시 Object [] 유형 임)로 전송됩니다. 거기서 나는 서비스 호출을하는 http endpoint를 가지고있다. 이 부분은 괜찮습니다. 그러나 응답 수신시 문제가 나타납니다. 나는 Test1 (2,3,4) 트랜스포머를 내 플로우 (단지 System.out.println())에서 호출 체인을 인쇄하도록했는데, 이상한 시퀀스로 호출되는 것을 보았다. 나는 그것을 가지고있다. 1,3과 마찬가지로 TestTransformer (sysouter이기도 함)처럼 메인 플로우 "Service flow"의 호출자에서 "NullPayload"오류를 얻은 다음 Test 4와 Test 2 out을 수신합니다. "1Proxy"패턴의 responseTransformer-refs는 "ServiceProxy"에서처럼 무시됩니다. 나는 지금 일주일 동안 해결책을 찾고 있었고 찾을 수 없었다. 디버깅에서 "TestTransformer"라는 트랜스포머가 예상 된 페이로드 (Object [])를 가지고 있지만 클래스 호출자에서 수신하면 "NullPayload"로 표시된다는 것을 알 수 있습니다. 이제는 내 끝점 중 하나에 ref 대신 path 요소가있는 것을 볼 수 있습니다.이 경우 흐름에 어떤 영향도 미치지 만 확인하지는 않습니다. 또한 "응답"블록을 사용하여 예상대로 내 플로우가 실행되도록했습니다. 어떤 제안도 감사합니다.뮬 이상한 흐름 동작

<http:endpoint name="httpService" address="${service.soap}" exchange-pattern="request-response" responseTimeout="${timeout}" /> 
<vm:endpoint name="vmService" path="vmService" exchange-pattern="request-response"/> 

<pattern:web-service-proxy 
    name="ServiceProxy" 
    inboundEndpoint-ref="httpService" 
    transformer-refs="to-string logging" 
    responseTransformer-refs="to-string logging" 
    outboundEndpoint-ref="vmService" /> 

<flow name="ServiceFlow" > 
    <inbound-endpoint ref="vmService"/> 
    <cxf:jaxws-service serviceClass="pkg.ServiceImpl" wsdlLocation="${service.wsdl}" enableMuleSoapHeaders="false" validationEnabled="true"/> 
    <custom-transformer class="pkg.Dispatcher"> 
    <spring:property name="vmFlowPath" value="vm.logService"/> 
    </custom-transformer> 
    <custom-transformer name="TestTransformer" class="pkg.TestTransformer"/> 
</flow> 

<vm:endpoint name="vm1In" path="vm1In" exchange-pattern="request-response"/> 
<vm:endpoint name="vm1Out" path="vm1Out" exchange-pattern="request-response"/> 

<custom-transformer name="arrayGenerator" class="pkg.ArrayGenerator"/> 
<custom-transformer name="objectExtractor" class="pkg.ObjectExtractor"/> 
<custom-transformer name="faultChecker" class="pkg.FaultChecker"/> 
<custom-transformer name="objectLogging" class="pkg.ObjectLogger"> 

<pattern:web-service-proxy 
    name="1Proxy" 
    inboundEndpoint-ref="vm1In" 
    transformer-refs="arrayGenerator objectLogging" 
    responseTransformer-refs="objectLogging objectExtractor faultChecker" 
    outboundEndpoint-ref="vm1Out" /> 

<flow name="logService"> 

<vm:inbound-endpoint path="vm.logService exchange-pattern="request-response"/> 

<custom-transformer class="Test1"/> 

<vm:outbound-endpoint ref="vm1In"> 
    <cxf:jaxws-client 
     serviceClass="pkg.ServiceImpl" 
     operation="import" 
     enableMuleSoapHeaders="false"/> 
    <object-to-string-transformer/> 

</vm:outbound-endpoint> 
<object-to-xml-transformer> 

<xm:xml-to-object-transformer returnClass="pkg.WSResponseClass"/> 

<custom-transformer class="Test2"/> 
</flow> 

<flow name="DispatcherToServiceFlow"> 
    <custom-transformer class="Test3"/> 
    <vm:inbound-endpoint path="vm1.Out"/> 

    <custom-transformer class="pkg.Dispatcher"> 
     <spring:property name="vmFlowPath" value="vm.import"/> 
    </custom-transformer> 

</flow> 

<flow name="import"> 
    <vm:inbound-endpoint path="vm.import" exchange-pattern="request-response"/> 

    <http:outbound-endpoint address="${importService}" responseTimeout="${timeout}" exchange-pattern="request-response" /> 

    <object-to-string-transformer/> 
<custom-transformer class="Test4"/> 
</flow> 

답변

1

가 아니라, 내 문제는 정말 대신

<inbound-endpoint ref="vm1Out"/> 
처럼 "심판"요소와 기존 VM 엔드 포인트 참조의 "경로"요소가 있었다 : 감사

여기

내 설정의 모습입니다

+0

추가 정보를 추가 하시려면 질문에 편집 링크를 사용하십시오. 답변 게시 버튼은 질문에 대한 완전한 대답을 위해서만 사용되어야합니다. – Rohan

+0

하지만 이것이 "이상한 흐름의 행동"에 대한 완전한 대답이라면 무엇입니까? 문제는 끝점을 잘못 인용 한 것입니까? – secario