2013-03-28 3 views
1

Synapse 2.1을 사용하여 웹 서비스를 사용하기위한 자격 증명을 포함하는 헤더가있는 XML 메시지를 헤더없이 SOAP 메시지로 변환하려고합니다. 이런 식으로 뭔가 :Synapse에서 XML 메시지에 헤더 추가하기

시냅스 수신 메시지 :

<SOAP-ENV:Envelope> 
<SOAP-ENV:Body> 
    ...TAGS... 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

시냅스 보내는 메시지 :

<SOAP-ENV:Envelope> 
<SOAP-ENV:Header> 
    <yta:Authentication> 
     <yta:UserName>srnm</yta:UserName> 
     <yta:Password>psswrd</yta:Password> 
    </yta:Authentication> 
</SOAP-ENV:Header> 
<SOAP-ENV:Body> 
    ...TAGS... 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

은 어떻게 냅 그것을 할 구성 할 수 있습니다? 메시지의 본문을 업데이트하기 위해 변환 파일을 성공적으로 사용하고 있지만 출력에 헤더를 추가하지는 않습니다.

구성 파일에서 헤더와 등록 정보 조정자를 사용했지만 어떤 방법으로 가고 있는지 잘 모르겠습니다. 머리말 중개자에 관하여 읽는 것은 "현재 설정 헤더는 단순한 가치있는 헤더만을 지원합니다"라고 말합니다. 이것이 사실 일 수 있습니까?

감사

답변

3

레코드의 경우 addHeader 메소드를 사용하여 구성 파일에서 인라인 JavaScript 스크립트가있는 스크립트 조정자를 사용하게되었습니다. 아래 참조 :

<script language="js"> 
    <![CDATA[ 
    var user = mc.getPayloadXML()..*::UserName.toString(); 
    var psswd = mc.getPayloadXML()..*::Password.toString(); 
    mc.addHeader(false, <yta:Authentication xmlns:yta="yta:namespace url"><yta:UserName>{user}</yta:UserName><yta:Password>{psswd}</yta:Password></yta:Authentication>); 
    ]]> 
</script> 
0

당신은 그것을 조작하는 XSLT 중재자를 사용할 수 있습니다. 따라서 필요한 헤더가있는 XSLT 변환을 추가하면 필요한 헤더가 추가됩니다. 또는 스크립트 중재자/클래스 중재자를 사용하여 메시지를 조작 할 수 있습니다.

유용한 정보는 다음을 참조하십시오.

http://wso2.org/forum/thread/10843

이 XML 구조가 필요하지 않은 경우

http://wso2.org/forum/thread/10794

. HTTP 헤더를 사용하면 아래와 같은 등록 정보를 사용할 수 있습니다. http://blog.thilinamb.com/2011/04/how-to-access-web-service-using-http.html

+0

감사합니다. 실제로 XSLT 변환에 추가하려고 시도했지만 작동하지 않았습니다. 이제 웹 서비스가 HTTP 헤더에 자격 증명을 보내야한다고 생각합니다. 현존하는 중개자들과 함께 할 수 있습니까 (헤더 또는 재산을 생각하는 것)? – pbons

+0

XSLT에서 얻은 문제점은 무엇입니까? 당신은 근원을 제공 했습니까? " 포럼 게시물에서 언급했듯이? 이것은 이름 값 쌍이 아니라 계층 적 구조입니다. 다른 옵션은 클래스 중개자를 사용하여 메시지를 구성하는 것입니다. 거기에 모든 권한이 있습니다. http://docs.wso2.org/wiki/display/ESB460/Sample+380%3A+Writing+your+own+Custom+Mediation+in+Java –

+0

XSLT 방식을 사용했을 때 "작동하지 않습니다. 라는 이름의 봉투가 웹 서비스 공급자로부터 웹 서비스에 존재했기 때문에 ""에서 봉투를 가져와 익명 사용자로 웹 서비스에서 인증하고 인증하는 것으로 이해합니다. 나는 당신이 제안하는대로 수업 중재자를 사용하는 방법을 조사 할 것이다. Groovy 나 JavaScript와 같은 인라인 스크립트를보고있었습니다. 그 헤더 중 하나를 사용하여 해당 헤더를 쉽게 만들 수 있다고 생각합니까? – pbons

0

서비스를 보호하려는 것 같습니다. 가장 쉬운 방법은 username-token 보안을 사용하는 것입니다. 프록시 서비스를위한 WSO2 ESB의 서비스 대시 보드로 이동하여 UT를 사용하여 보안을 설정하십시오. 보안 샘플에 대해서는 http://docs.wso2.org/wiki/display/ESB460/Sample+200%3A+Using+WS-Security+with+policy+attachments+for+proxy+services을 참조하십시오.

+0

감사합니다 Samisa. 당신이 제안한 보안 정책에 약간의 시간을 보냈고 시간이 없어 꽤 복잡해졌습니다.나는 WS-Security와 Rampart 구성에서 약간의 시간을 보냈지 만 그것은 아무 곳에도 없다. 나는 이것이 하나의 선택이라고 확신하지만, 보안 지식이 없다면 시간이 많이 걸릴 것입니다. 결국 나는 Synapse 구성에서 스크립트를 사용했습니다 (응답 항목 참조). – pbons

관련 문제