2013-03-28 26 views
1

使用Synapse 2.1,我試圖將沒有標頭的XML消息轉換爲帶有包含憑證的標頭的SOAP消息以使用Web服務。事情是這樣的:向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

爲了記錄在案,我結束了使用腳本中介與內嵌的JavaScript腳本使用方法的addHeader的配置文件中見下:

<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轉換與所需的標題,它會添加所需的標題。或者使用Script mediator/Class mediator來操縱消息。

請參考以下有用的內容。

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

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

如果不需要此XML結構。 你可以使用Http Headers,你可以使用下面的屬性。 http://blog.thilinamb.com/2011/04/how-to-access-web-service-using-http.html

+0

謝謝謝蘭。我實際上已經嘗試將它添加到XSLT轉換中,但它不起作用。所以,現在我認爲Web服務需要發送HTTP頭中的憑證。是否有可能與任何現有的調解人(考慮標題或財產)做到這一點? – pbons

+0

您使用XSLT時遇到了什麼問題?你有沒有給源碼?「。正如論壇帖子中提到的那樣?這不是名稱值對,而是分層結構。其他選項是使用類中介來構造消息。你有完全的訪問權限。 http://docs.wso2.org/wiki/display/ESB460/Sample+380%3A+Writing+your+own+Custom+Mediation+in+Java –

+0

當我使用XSLT方法時,出現錯誤「無操作在Web服務提供者中存在名爲Envelope的Web服務「,所以我知道它將」「中的Envelope作爲匿名用戶在Web服務中的操作和身份驗證。按照你的建議,我會考慮使用類中介。我正在研究Groovy或JavaScript等內聯腳本。你認爲使用其中的任何一個創建頭文件是很容易的嗎? – pbons

0

看起來像要保護服務。最簡單的方法是使用用戶名令牌安全性。使用UT轉到WSO2 ESB中的服務儀表板進行代理服務並確保其安全。另請參閱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