I try to consume an axis 2 web service with rampart security
I'm stuck with thsi qustion for fthree days but know I get thsi exception:
Exception in thread "main" org.apache.axis2.AxisFault: 1
at
org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)OutInAxisOperation.java:375)OutInAxisOperation.java:421)OutInAxisOperation.java:229)OperationClient.java:165)ServiceClient.java:555)ServiceClient.java:531)zltestcl.java:55)
---------------------------------------------------------------------------------------------
Here is my PWCBhanler,.java
packagetan;importorg.apache.ws.security.WSPasswordCallback;importjavax.security.auth.callback.Callback;importjavax.security.auth.callback.CallbackHandler;importjavax.security.auth.callback.UnsupportedCallbackException;importjava.io.IOException;public
UnsupportedCallbackException {classPWCBHandler implementsCallbackHandler
{publicvoidhandle(Callback[] callbacks) throwsIOException,for(inti = 0; i <
callbacks.length; i++) {//When the server side need to authenticate the
userWSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
pwcb.setPassword(
}
}if(pwcb.getIdentifier().equals("bob") ) {"bobPW");}
}
here is my service.xml
<service name="ztest" >
<module ref="rampart"/>
<Description>
Please Type your service description here
</Description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">tan.ztest</parameter>
<wsp:Policy wsu:Id="UTOverTransport"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SignedSupportingTokens
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"
/>
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordCallbackClass>tan.PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
</service>
---------------------------------------------------------------------------------------------------------------------------------
Here is my policy.xml
<wsp:Policy wsu:Id="UTOverTransport"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SignedSupportingTokens
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"
/>
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:user>bob</ramp:user>
<ramp:passwordCallbackClass>tan.PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
(the only difference is th added <ramp:user > paramete4r from services.xml
------------------------------------------------------------------------------------------------------------------------
and here is my client.java
package tan;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.neethi.Policy;
import org.apache.neethi.PolicyEngine;
import org.apache.rampart.RampartMessageData;
import javax.xml.namespace.QName;
public class zltestcl {
public static void main(String[] args) throws Exception {
if(args.length != 3) {
System.out.println("Usage: $java Client endpoint_address
client_repo_path policy_xml_path");
}
ConfigurationContext ctx =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1],
null);
ServiceClient client = new ServiceClient(ctx, null);
Options options = new Options();
options.setAction("urn:testws");
options.setTo(new EndpointReference(args[0]));
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY,
loadPolicy(args[2]));
client.setOptions(options);
client.engageModule("rampart");
OMElement response = client.sendReceive(getPayload("Hello world"));
System.out.println(response);
}
private static Policy loadPolicy(String xmlPath) throws Exception {
StAXOMBuilder builder = new StAXOMBuilder(xmlPath);
return PolicyEngine.getPolicy(builder.getDocumentElement());
}
private static OMElement getPayload(String value) {
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace ns = factory.createOMNamespace("http://tan%22,%22ns1/");
OMElement elem = factory.createOMElement("testws", ns);
OMElement childElem = factory.createOMElement("param0", null);
childElem.setText(value);
elem.addChild(childElem);
return elem;
}
}
----------------------------------------------------
!!! note in my prvicy.xml I changd the <ramp user_ and instead of bob I wrote
mary
and I got the exception:
No password supplied by the callback handler for user: mari
so it seems thart my client code is reading the policy.xml
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(
at org.apache.axis2.description.OutInAxisOperationClient.send(
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(
at org.apache.axis2.client.OperationClient.execute(
at org.apache.axis2.client.ServiceClient.sendReceive(
at org.apache.axis2.client.ServiceClient.sendReceive(
at tan.zltestcl.main(