我正在使用camel在一個看起來像一箇舊接口的新後端實現代理。較舊的API在請求正文中具有用戶名/密碼憑據,並且新的後端服務使用基本身份驗證。我有一個將抽取un/pw的XSL,對XML數據庫進行簡單的查找(憑據可能不會完全映射),並將以base64編碼的字符串形式返回正確的憑據。我無法弄清楚如何將其設置爲http Authentication標頭值(例如,如何在.setHeader()調用中將XSL轉換處理爲表達式)。在Camel中,如何設置XSL轉換結果的標題值?
我有一個看起來像這樣的SOAP請求:
<soapenv:Envelope>
<soapenv:Body>
<XService>
<_Header username="demo" password="demo"/>
<_Body>
<_RequestParameters xsi:type="RequestServiceReport">
...
</_RequestParameters>
</_Body>
</XService>
</soapenv:Body>
和我的路線(使用Java DSL)看起來有點像這樣:
from("jetty:http://161.228.88.168:8080/sap2rjm")
.choice()
.when().simple("${header.channel}")
...
.when().simple("${in.header.emx} == 'authenticate'")
...
.endChoice()
// If the request is for a report, route it to the new service
.when().xpath("//_RequestParameters[@type='RequestServiceReport']")
// TODO: How to get header from the body of the message and set as the header value?
// Stylesheet transform_credentials will extract username/password from body, transform
// for the new service (dev.reportjam) and will base4 encode to produce a string like this one...
.setHeader("Authorization", constant("Basic ZGVtbzpkZW1v"))
.to("xslt:transform_request.xsl")
.to("http://dev.reportjam.com/services/ReportMix?bridgeEndpoint=true")
.to("xslt:transform_response.xsl")
.removeHeaders("*")
.endChoice()
.otherwise()
...
.endChoice()
.end();
我有另一個樣式表它會處理soap請求,提取un/pw,應用一些邏輯來轉換它,然後base64編碼它,但我不知道如何在上面的setHeader()調用中調用它。
感謝
請出示你所擁有的一些代碼或相似。你使用什麼組件?很難弄清楚你真正想從這個問題中得到什麼。 – 2013-04-29 18:40:34