2010-07-16 5 views
1

서버 쪽에서 HeaderValueRouter와 함께 사용할 일부 헤더를 포함하도록 Message 인터페이스를 구현했습니다.MessageHeaders가 HttpOutboundGateway에서 분실 됨

하나의 VM에서이 기능은 작동합니다 (두 개의 끝점 사이에 필터를 사용하여 테스트 됨).

그러나 HttpOutboundGatway를 통해 메시지를 보내면 내 필드가 삭제됩니다 (HttpRequest에 포함되지 않음). 따라서 라우팅 정보는 서버 측에서 손실됩니다.

헤더를 조작하지 않아도됩니까?

public class TaskMessage implements Message<String> { 

    private MessageHeaders headers; 
    private String payload; 

    public TaskMessage(String taskId, String boxId, String payload) { 
     super(); 
     this.taskId = taskId; 
     this.boxId = boxId; 
     this.payload = payload; 
     StringMessage sm = new StringMessage(payload); 
     Set<String> keySet = sm.getHeaders().keySet(); 

     HashMap<String, Object> map = new HashMap<String, Object>(); 
     for (String key : keySet) { 
      map.put(key, sm.getHeaders().get(key)); 
     } 
     map.put("taskId", taskId); 
     map.put("boxId", boxId); 
     headers = new MessageHeaders(map); 
    } 
    @Override 
    public MessageHeaders getHeaders() { 
     return headers; 
    } 

    @Override 
    public String getPayload() { 
     return payload; 
    } 
} 

편집 :

버전 내 구성의 일부는 1.0.3

입니다 :

<si:inbound-channel-adapter ref="jdbcInputAdapter" method="fetchData" channel="msgChannel"> 
    <si:poller max-messages-per-poll="1"> 
     <si:interval-trigger interval="5000" /> 
    </si:poller> 
</si:inbound-channel-adapter> 

<http:outbound-gateway id="httpChannelAdapter" auto-startup="true" request-timeout="1000" request-channel="msgChannel" reply-channel="replyChannel" default-url="http://localhost:8080/taskserver/gateway"/> 

답변

1

는 지원하지 않습니다 사용하고있는 버전 (사용자 정의) 헤더 직렬화 . 해결책은 필요한 모든 정보가 들어있는 요청을 작성하여 페이로드로 전달하는 것입니다. 버전 2.0.x의 새로운 REST 기반 http 지원은 헤더 매핑을 지원하고 메시지 (헤더 포함) 변환을위한 확장 점을 제공합니다. 보조 노트로

, 그래서 대신 내가 일반적으로 모든 헤더와 함께 전송 될 수 없습니다 MessageBuilder

MessageBuilder.withPayload("foo").setHeader("taskId", "someTaskId").build(); 

를 사용하여 메시지를 만들 거라고 일을, 사용자 정의 메시지를 구현해야하는 것은 매우 드문 일이다 모든 프로토콜을 지원하므로 분산 시스템을 사용하려는 경우 일반적으로 페이로드로 전송해야하는 모든 정보를 압축하는 것이 더 유연합니다.

+0

@iwein 질문에 버전 및 구성 (부분)을 추가했습니다. 나는 왜 내 머리글이 내 메시지에서 제거되었는지 알고 싶습니다. 미리 감사드립니다. – stacker

+0

답변 됨 그에 따라 업데이트 됨 – iwein

+0

@iwein 감사합니다. 나는 문자열의지도 o payload를 바꿨습니다. 문자열이 이제 작동합니다. – stacker

관련 문제