我需要編寫一個Web服務客戶端來調用第三方Web服務(基於SOAP)。第三方發佈了一個wsdl和相關的xsd文件。在Java中調用安全的Web服務
第三方使用的.p12證書
我用的WSDL2Java生成我存根確保他們的網站和服務。我修改了端點並調用了服務。我收到以下錯誤:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header></SOAP-ENV:Header>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode>
<faultstring>SECU1075: An error was discovered processing the <wsse:Security> header</faultstring>
<detail>SECU3510: Signature requirements validation failed: Element (/soapenv:Envelope/soapenv:Body) was not signed</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
嗯,好的。有道理我應該簽署文件。
奇怪的部分(對我來說)在WSDL文件的任何地方都沒有安全定義。這是正常的嗎?我聯繫了第三方,他們給我發了一份關於SOAP消息需要的外觀的pdf。下面的代碼會顯示在標題: 包含:
<wsse:BinarySecurityToken>
和
<dsig:SignedInfo>
所以從我收集,它需要我的證書和一些數字簽名。
有人可以推薦如何在Java中生成這些文件嗎?我開始介紹Axis2/Rampart的路徑,但說實話,看起來這些預測是在WSDL文件中定義了安全需求(如果我錯了,請糾正我)。
我看了你的評論後,我實際上已經與Rampart取得了一些進展。我認爲我需要某個人真正告訴我,服務本身並不需要安全定義來推進。這聽起來很奇怪。 – 2010-12-08 04:54:23