2010-12-16 3 views
1

나는이처럼 CXF 구성 요소를 사용하여 낙타에서 웹 서비스를 소비하기 위해 노력하고있어 :낙타 CXF 소비자, 웹 서비스 메소드는 응답이 없습니다

sendMessage 메소드는 따라서 응답의 inOnly보다는 to이 없습니다
<cxf:cxfEndpoint id="webservice" 
       address="http://webservice.url.com/webservice" 
       serviceClass="com.url.webservice.MyWebService"/> 

<camel:camelContext> 
    <camel:route> 
     <camel:from uri="direct:a"/> 
     <camel:inOnly uri="cxf:bean:webservice?defaultOperationName=sendMessage"/> 
    </camel:route> 
</camel:camelContext> 

(내가 비록 to을 시도 할 때 같은 문제가 있지만). 문제는 명백하게 낙타가 아직도 응답을 기대하고, 길은 하나를 기다리는 동안 멈추는 것이다. 나는 그것이 충분히 길게하려고한다면 결국 시간이 초과 될 것이라고 생각합니다.

명확하게하기 위해, 나는 시험 방법 실행 해요 :

/* ... */ 

@Produce(uri = "direct:a") 
protected ProducerTemplate directA; 

@Test 
public void sendMessage() throws Exception { 
    directA.sendBody(new String[] {"client id", "message"}); 
    directB.sendBody(new String[] {"client id", "message 2"}); 
} 

을 그리고 두 번째 첫 번째 호출의 효과 (즉, 메시지가 서버에 도착를)보고 있지만 아니에요 메소드가 실행을 마치지 않습니다. (다시 말하면, 어떤 시점에서 타임 아웃이 발생한다고 가정하고 있습니다 ... 그렇다면 제한 시간은 꽤 길다. 필자가이 글을 쓰기 시작하면서 테스트를 실행했고 여전히 실행 중이다.)

내가 누락 된 항목이 있습니까? 그게 버그 야? 응답이없는 웹 서비스 메서드를 사용하는 것은 나쁜 습관입니까?

그런데 응답이있는 메소드를 테스트 할 때 잘 동작합니다.

답변

2

나는 Willem Jiang이 최근에 Camel에서 단방향 CXF로 문제를 해결했다고 생각합니다. 아마도 Camel 2.6-SNAPSHOT을 트렁크에서 사용해보십시오.

개인적으로 웹 서비스의 양방향을 선호합니다. 반환 할 데이터가없는 경우 일부 ACK 만 반환합니다. 클라이언트는 가장 자주 서버가 데이터를 수신하고 확인했는지 확인해야합니다.

+0

나를 위해 문제를 해결,하지만 난 때 다시 시도에 관심이 있어요 2.6이 릴리스되었습니다. 감사! – ScArcher2

1

camel-cxf 제작자는 작업이 한쪽인지 확인하여 응답 메시지를 처리 ​​할 것인지 결정합니다. 심지어 sendMessage 작업이 일방적 인 호출이라면 서버는 HTTP 프로토콜에 따라 Http 상태 202 메시지를 클라이언트에 보내야합니다. 그렇지 않으면 camel-cxf 제작자는 여전히 응답을 기다립니다.

BTW, Claus가 말한 것과 같은 한 가지 방법으로 낙타 -cxf 제작자의 비동기 호출과 관련이 있다고 생각합니다. 내가 언급 한 것과 동일한 문제인지는 확실하지 않습니다. 낙타는 당신을 사용하고 있습니다). 부울 반환

[1] https://issues.apache.org/jira/browse/CAMEL-3426

빌렘

관련 문제