2013-04-11 4 views
0

낙타 시나리오에 낙타에서 속성을 (모든)를 선택 복사 방법 :activiti

  • 읽기 파일
  • 데이터베이스에 뭔가 예를 들어 저장소의 콘텐츠
  • 실행 activiti 과정을하고 이전 단계
  • 에서 변수를 전달

RouteBuilder :

from("file:/home/work/Inbox") 
.to("bean:sourceFileService?method=storeFile") 
.to("activiti:Receive?copyVariablesFromProperties=true") 

호출 bean 중 sourceFileService 특성 'sourceFileId'가 설정됩니다. 이 변수는 변수로 수신 프로세스로 전송되어야합니다.

copyVariablesFromProperties를 사용하지 않으면 모든 변수가 처리 중에 설정되지 않습니다. 한 다른 측면 때 copyVariablesFromProperties = 다음 낙타 모든 속성 및 예외를 전달하려고 진정한 발생

ActivitiException : 재산의 하나이기 때문에

(오브젝트가 나타내는 GenericFile를 직렬화 할 수있는 변수 유형을 찾을 수 없습니다 파일 읽기, 다른 7 개의 원치 않는 속성이 있음)

activiti endpoint 또는 낙타의 'to'에 선택한 속성 만 전달하는 방법은 무엇입니까?

답변

0

변경 sourceFileServicestoreFile 메소드 서명은 다음과 같습니다.

public String storeFile(... your other params, @OutHeaders Map headers) { 
     ... 
     headers.put("sourceFileId", "32132132"); 
     .... 
} 

내가 copyVariablesFromProperties의 사용이 필요하지 않습니다 것으로 나타났습니다

+0

내가 가지고있는 ' 공공 무효 storeFile (교환 교환) { ... exchange.setProperty ("sourceFileId" "1234"); ... } ' 괜찮습니다. Ineed는 activiti 프로세스의 변수로이 속성을 전달하는 방법을 알고 있습니다. '(to activiti : Receive)' –

0

당신은 당신의 activiti 엔드 포인트에서 설정 sourceFileId에 액세스 할 수 있습니다. 본체지도 낙 해당지도를 이용 activiti 프로세스 변수를 설정하면 동일한

.setBody().properties() 
.to("activiti:Receive") 

의해 달성된다. 하지만 여전히 같은 이유로 예외가 발생합니다 (필요없는 직렬화 가능 객체 전달하지 않음).

내가 찾은 유일한 해결책은

from("file:/home/work/Inbox") 
.to("bean:sourceFileService?method=storeFile") 
.setBody(method(Helper.class)) 
.to("activiti:Receive") 

입니다

public class Helper { 
    @Handler 
    public Map getProcessVariables(Exchange exchange) { 
     Map<String, Object> variables = new HashMap<String, Object>(); 
     variables.put("sourceFileId, exchange.getProperty("sourceFileId")); 
     return variables; 
    } 
}