0
我正在嘗試使用需要在Mule中使用CXF的安全性的SOAP Web服務。我有它的工作,但我需要把密碼放在一個配置文件。我找不到如何將密碼從配置傳遞給flow/callback類。我的流程是這樣的:在Mule流中使用帶有安全性的SOAP Web服務
<cxf:jaxws-client
clientClass="za.co.iam.service.identitymanager.intf._1.IdentityManager_Service"
port="IdentityManager"
wsdlLocation="classpath:/wsdl/IdentityManager.wsdl"
operation="CheckUserId" doc:name="CXF">
<cxf:ws-security>
<cxf:ws-config>
<cxf:property key="action" value="UsernameToken Timestamp"/>
<cxf:property key="user" value="${security.username}"/>
<cxf:property key="passwordType" value="PasswordText"/>
<cxf:property key="passwordCallbackClass" value="za.co.iam.IamPasswordCallback"/>
</cxf:ws-config>
</cxf:ws-security>
</cxf:jaxws-client>
<outbound-endpoint address="${iam.webservice}" doc:name="Generic"/>
的IamPasswordCallback
類:
public class IamPasswordCallback implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
{
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setPassword("********");
}
}
這工作得很好,但我需要把密碼進入配置文件中。我通常會這樣做的方法是從IamPasswordCallback
中創建一個bean,並在流中設置值並將該bean用於CXF設置中的回調處理程序,但我不知道該配置應該是什麼樣子。另一種方法是加載IamPasswordCallback
類中的屬性文件,但我認爲不推薦。
這似乎並不奏效。該物業似乎不想成爲一個字符串? 'java.lang.ClassCastException:za.co.entityapi.IamPasswordCallback不能在org.apache.ws.security.handler.WSHandler.getString被鑄造爲java.lang.String \t(WSHandler.java:1220) \t在org.apache.ws.security.handler.WSHandler.getCallbackHandler(WSHandler.java:923) \t at org.apache.ws.security.handler.WSHandler.getPasswordCallbackHandler(WSHandler.java:939)' –
我使用Mule 3.6。 2 BTW –
噢好吧..這是在3.4工作。我會嘗試一下,讓你知道。 – jvas