여러 계층으로 나뉘어 진 MULE REST 서비스를 프로그래밍하고 있습니다.MULE 3.7.0 C.E. - BufferInputStream 페이로드가 문자열로 변합니다.
API 계층 (RAML 기반)은 인바운드 요청을 받고 일부 하위 클래스가 진행 방법을 알 수 있도록 일부 flowVars를 준비합니다.
두 번째 레이어도 정의되어 있으므로 각 서비스에 대해 하나의 흐름이 있습니다.
마지막으로 세 번째 계층은 고유 한 흐름을 포함하며 상위 계층에 구성된 flowVars에 따라 HTTP 요청 구성 요소를 사용하여 필요한 타사 서비스에 대한 호출을 수행합니다.
이 세 번째 계층에서 일부 감사 기록은 우리가 전송하는 정보와 수신중인 정보를 확인하기 위해 작성됩니다. 따라서 감사 구성 요소 (사용자 지정 MULE 커넥터)는 페이로드 콘텐츠를 데이터베이스에 쓸 필요가 있으므로 message.getPayloadAsString()
(또는 이와 비슷한)이 필요합니다. 깨끗한 게터 (예 : message.getPayload()
)를 사용하면 데이터 형식 만 가져와 데이터베이스에 기록됩니다.
여기에 문제가 있습니다. 받은 모든 페이로드는 BufferInputStream 인 것 같습니다. message.getPayloadAsString()
을 수행하면 내부 캐스팅이 페이로드에 영향을 미치는 것 같습니다. 이것은 우리가 발견 한 경우를 제외하고는 문제가되지 않을 것입니다. 우리가 호출하는 서비스 중 하나가 PNG 파일을 반환하므로 message.getPayloadAsString()
은이를 문자열로 변환하고 이미지를 분리합니다.
캐스팅에서 사본 중 하나를 안전하게 유지하기 위해 페이로드를 복제하려했지만 Object로서 Cloneable 인터페이스를 구현하지 않았습니다. 우리는 다른 단일 방법으로 페이로드 사본을 만들려고했지만 새로운 참조 만 생성됩니다. 우리는 직렬화 된 데이터에서 새로운 복사본을 생성하기 위해 페이로드를 직렬화하려고 시도했지만 Object는 Serializable 인터페이스를 구현하지 않습니다 ... 쓸모없는 모든 것.
도움, 아이디어 또는 조언을 주시면 감사하겠습니다.
감사합니다. @AndrewKoropets가 게시물의 서식을 편집합니다. 나는 그것이 잘못되었다는 사실조차 알지 못했다. :-) –