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