I have a strange problem, which I'm hoping someone can help me with... I am using axis2 ADB bindings and Rampart to make a call to a web service as a client. Everything works fine when I am in Eclipse (using Maven). However, when I expand all the dependent JAR files and build a single JAR file of my code (using Maven) and its dependencies, then run the same main class/method, it fails with the following error:
java.lang.RuntimeException: Undefined 'Security policy namespace cannot be null.' resource property After some analysis, I seem to have found the root cause, but just don't know how to fix it. The problem seems to be that when the Policy object is built, it isn't associating the correct Assertion classes within it. Here is the code that I used to discover this: StAXOMBuilder builder = new StAXOMBuilder(policyXmlPath); //policyXmlPath is the full path to my policy.xml file Policy servicePolicy = PolicyEngine.getPolicy(builder.getDocumentElement()); List it = (List)servicePolicy.getAlternatives().next(); for (int i=0; i<it.size(); i++) { Assertion assertion = (Assertion)it.get(i); logger.debug("i: %s | type: %s | name: %s | namespace uri: %s", i, assertion.getClass().getName(), assertion.getName(), assertion.getName().getNamespaceURI()); } The printout I get from Eclipse is: i: 0 | type: org.apache.ws.secpolicy.model.AsymmetricBinding | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}AsymmetricBinding | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 1 | type: org.apache.ws.secpolicy.model.Wss10 | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}Wss10 | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 2 | type: org.apache.ws.secpolicy.model.SignedEncryptedParts | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}SignedParts | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 3 | type: org.apache.rampart.policy.model.RampartConfig | name: {http://ws.apache.org/rampart/policy}RampartConfig | namespace uri: http://ws.apache.org/rampart/policy Whereas the printout I get from running the main class via the JAR file is: i: 0 | type: org.apache.neethi.builders.PolicyContainingPrimitiveAssertion | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}AsymmetricBinding | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 1 | type: org.apache.neethi.builders.PolicyContainingPrimitiveAssertion | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}Wss10 | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 2 | type: org.apache.neethi.builders.xml.XmlPrimitiveAssertion | name: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}SignedParts | namespace uri: http://schemas.xmlsoap.org/ws/2005/07/securitypolicy i: 3 | type: org.apache.rampart.policy.model.RampartConfig | name: {http://ws.apache.org/rampart/policy}RampartConfig | namespace uri: http://ws.apache.org/rampart/policy Notice that in the latter case, the first two are the generic PolicyContainingPrimitiveAssertion rather than the more specific AsymmetricBinding and Wss10 classes, respectively. I do in fact have all the files from rampart-policy and rampart-trust (which originally encapsulated these two classes) in my JAR file. So why then is it not binding them to what it finds from the policy.xml file? Any help would be greatly appreciated. --rostom