[ https://issues.apache.org/jira/browse/AXIS2-5904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17893481#comment-17893481 ]
Robert Lazarski commented on AXIS2-5904: ---------------------------------------- [~veithen] looks to me like some branch commits never got merged while some other master branch commits got reverted. The OP says he is no longer maintaining the code and this issue is very old now - so, I'm inclined to mark it s incomplete however there is still a small window for fix if you want to put in the effort. I'm not so sure I would take this on myself since it is so complex and an old issue without anyone to test it. > Intermittent Rampart policy configuration missing Error > ------------------------------------------------------- > > Key: AXIS2-5904 > URL: https://issues.apache.org/jira/browse/AXIS2-5904 > Project: Axis2 > Issue Type: Bug > Components: client-api, codegen, modules, rpc > Affects Versions: 1.7.0, 1.7.7 > Environment: Apache Tomcat 9 > Reporter: Mohamed Anis Mekki > Priority: Critical > > I created a secured (sign body) Axis2 Web Service and generated .aar archive > which I deployed to Axis2 Container (.war in Apache Tomcat). I then used > Java2WSDL to generate a client stub. I finally created the class below that > uses the client stub. > In a nutshell the main method of the class calls consecutively the first then > the second method of the service. I create a separate service stub for each > call, using serviceStub() method and configure correctly the rampart security > policy using getRampartConfig() method. > {code:java} > package tn.nat.cnss.client; > import java.util.Properties; > import java.rmi.RemoteException; > import org.apache.axis2.AxisFault; > import org.apache.axis2.context.ConfigurationContext; > import org.apache.axis2.context.ConfigurationContextFactory; > import org.apache.axis2.transport.http.HTTPConstants; > import org.apache.neethi.Policy; > import org.apache.rampart.policy.model.CryptoConfig; > import org.apache.rampart.policy.model.RampartConfig; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.ArrayOfString; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.Operation1; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.Operation2; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.Operation1Response; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.Operation2Response; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.ServiceRequestOperation1; > import tn.nat.cnss.client.Sample2SignBodyServiceStub.ServiceRequestOperation2; > public class Sample2SignBodyServiceClient > { > private static Policy getRampartConfig() > { > RampartConfig rampartConfig = new RampartConfig(); > rampartConfig.setUser("clientkey"); > > rampartConfig.setPwCbClass("tn.nat.cnss.client.PasswordCallBackHandler"); > CryptoConfig sigCrypto = new CryptoConfig(); > > sigCrypto.setProvider("org.apache.ws.security.components.crypto.Merlin"); > Properties props = new Properties(); > > props.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", > "JKS"); > > props.setProperty("org.apache.ws.security.crypto.merlin.file","keys/client.jks"); > > props.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", > "clientStorePW"); > sigCrypto.setProp(props); > rampartConfig.setSigCryptoConfig(sigCrypto); > Policy policy = new Policy(); > policy.addAssertion(rampartConfig); > return policy; > } > private static Sample2SignBodyServiceStub serviceStub() throws AxisFault > { > > org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF); > ConfigurationContext ctx = > ConfigurationContextFactory.createConfigurationContextFromFileSystem("client-repo", > null); > Sample2SignBodyServiceStub serviceStub = new > Sample2SignBodyServiceStub(ctx,"http://localhost:8080/axis2/services/Sample2SignBodyService"); > serviceStub._getServiceClient().engageModule("rampart"); > Policy rampartConfig = getRampartConfig(); > > serviceStub._getServiceClient().getAxisService().getPolicySubject().attachPolicy(rampartConfig); > > serviceStub._getServiceClient().getOptions().setTimeOutInMilliSeconds(300000); > > serviceStub._getServiceClient().getOptions().setProperty(HTTPConstants.SO_TIMEOUT, > new Integer(300000)); > > serviceStub._getServiceClient().getOptions().setProperty(HTTPConstants.CONNECTION_TIMEOUT, > new Integer(300000)); > return serviceStub; > } > public static Operation1Response operation1(String...parameters) throws > RemoteException, AxisFault > { > Sample2SignBodyServiceStub serviceStub = serviceStub(); > ServiceRequestOperation1 req = new ServiceRequestOperation1(); > req.setParam1(parameters[0]); > req.setParam2(parameters[1]); > req.setParam3(parameters[2]); > Operation1 operation = new Operation1(); > operation.setServiceRequestOperation1(req); > Operation1Response resp = serviceStub.operation1(operation); > serviceStub._getServiceClient().cleanupTransport(); > serviceStub._getServiceClient().cleanup(); > serviceStub.cleanup(); > return resp; > } > public static Operation2Response operation2(String...parameters) throws > RemoteException, AxisFault > { > Sample2SignBodyServiceStub serviceStub = serviceStub(); > ServiceRequestOperation2 req = new ServiceRequestOperation2(); > req.setParam1(parameters[0]); > req.setParam2(parameters[1]); > Operation2 operation = new Operation2(); > operation.setServiceRequestOperation2(req); > Operation2Response resp = serviceStub.operation2(operation); > serviceStub._getServiceClient().cleanupTransport(); > serviceStub._getServiceClient().cleanup(); > serviceStub.cleanup(); > return resp; > } > public static void main(String[] args) throws Exception > { > Operation1Response operation1Response = operation1("0", > "99999", "99999"); > System.out.println("operation1: Debut Execution"); > System.out.println(operation1Response.get_return().getResult()); > System.out.println("Nombre de colonnes: " + > operation1Response.get_return().getNumberColumns()); > System.out.println("Nombre de lignes: " + > operation1Response.get_return().getNumberLines()); > for (ArrayOfString array : > operation1Response.get_return().getDataSet()) > { > for (String s : array.localArray) > { > System.out.print(s + "\t"); > } > System.out.println(); > } > System.out.println("operation1: Fin Execution"); > Operation2Response operation2Response = operation2("0", > "99999"); > System.out.println("operation2: Debut Execution"); > System.out.println(operation2Response.get_return().getResult()); > System.out.println("Nombre de colonnes: " + > operation2Response.get_return().getNumberColumns()); > System.out.println("Nombre de lignes: " + > operation2Response.get_return().getNumberLines()); > for (ArrayOfString array : > operation2Response.get_return().getDataSet()) > { > for (String s : array.localArray) > { > System.out.print(s + "\t"); > } > System.out.println(); > } > System.out.println("operation2: Fin Execution"); > } > } > {code} > The problem is that execution leads to the intermittent error below. By > intermittent I mean that sometimes both operation calls execute properly, but > some other times only the first call or none. > {code:java} > org.apache.axis2.AxisFault: Rampart policy configuration missing > at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:76) > at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:335) > at org.apache.axis2.engine.Phase.invoke(Phase.java:308) > at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:250) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:415) > at > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399) > at > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225) > at > org.apache.axis2.client.OperationClient.execute(OperationClient.java:150) > at > tn.nat.cnss.client.Sample4SignEncryptBodyServiceSSLStub.operation2(Sample4SignEncryptBodyServiceSSLStub.java:307) > at > tn.nat.cnss.client.Sample4SignEncryptBodyServiceSSLClient.operation2(Sample4SignEncryptBodyServiceSSLClient.java:121) > at > tn.nat.cnss.client.Sample4SignEncryptBodyServiceSSLClient.main(Sample4SignEncryptBodyServiceSSLClient.java:162) > Caused by: org.apache.rampart.RampartException: Rampart policy configuration > missing > at > org.apache.rampart.builder.BindingBuilder.getSignatureBuilder(BindingBuilder.java:277) > at > org.apache.rampart.builder.BindingBuilder.getSignatureBuilder(BindingBuilder.java:250) > at > org.apache.rampart.builder.AsymmetricBindingBuilder.doSignature(AsymmetricBindingBuilder.java:760) > at > org.apache.rampart.builder.AsymmetricBindingBuilder.doSignBeforeEncrypt(AsymmetricBindingBuilder.java:417) > at > org.apache.rampart.builder.AsymmetricBindingBuilder.build(AsymmetricBindingBuilder.java:88) > at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:147) > at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:65) > ... 10 more > {code} > I use Axis2 version 1.7.0 and Apache Tomcat 9.0 with Java 8. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org