我從WSDL創建Java Web服務客戶端的過程中來的。我使用Eclipses的動態Web項目和新的Web服務客戶端,通過Apache Axis 1.4與wsdl2java生成代碼。我需要將SOAP身份驗證添加到此代碼中,以便它與該服務一起使用。在生成的代碼中我找不到這樣做的地方。經過大量研究後,我發現了這一點,迄今爲止,我已將它用作我的代碼的主幹。添加SOAP頭驗證碼
Adding ws-security to wsdl2java generated classes
之前,我得到一個什麼沿着這些線路的「錯誤在處理該消息安全時發生」。現在我越來越
「異常:聽不懂‘的mustUnderstand’物管:{} http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd安全消息:空」
我試過很多事情要突破這個例外。這是我現在到達的代碼。
javax.xml.namespace.QName headerName = new javax.xml.namespace.QName(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement(headerName);
header.setActor(null);
header.setMustUnderstand(true);
// Add the UsernameToken element to the WS-Security header
javax.xml.soap.SOAPElement utElem = header.addChildElement("UsernameToken");
utElem.setAttribute("Id", "uuid-3453f017-d595-4a5b-bc16-da53e5831cd1-1");
javax.xml.soap.SOAPElement userNameElem = utElem.addChildElement("Username");
userNameElem.setValue("username");
javax.xml.soap.SOAPElement passwordElem = utElem.addChildElement("Password");
passwordElem.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
passwordElem.setValue("password");
header.setProcessed(true);
// Finally, attach the header to the binding.
setHeader(header)
此代碼位於我的Binding_ServiceStub類(在其的createCall方法)。
我們已經創建了C#和VB與此WSDL的客戶,並有它剛剛改變ClientCredentials變量,它是生成的代理類的擴展一樣簡單。我希望在這裏有類似的東西。
下面是從WSDL代碼的安全策略以及。
<wsp:Policy><sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssUsernameToken10/></wsp:Policy></sp:UsernameToken></wsp:Policy>
有沒有人知道我還能在這裏做什麼?爲什麼這個例外發生?我試過前綴和setProcesses和setMustUnderstand值的許多不同的組合,一切都是徒勞的(基於我的這種異常的研究)。
而且如果有誰知道,在其中肥皂頭認證添加到WSDL2Java的代碼,我會採取過的方式。只需要這個工作,你會認爲這樣會更直接一點,或者至少有更多的例子。
Update- 確認使用SOAPUI傳遞的相同頭文件正常工作。必須是框架的東西?我創建了一個自定義處理程序來處理SOAP消息,但這並沒有幫助。 Axis 1.4和JAX-RPC是問題嗎? (我知道他們是過時但仍...)