[ 
https://issues.apache.org/jira/browse/AXIS-2826?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jaganmohan Reddy updated AXIS-2826:
-----------------------------------

    Attachment: SOAPService.java

Attaching the file with changed SOAPService.getInitializedServiceDesc()

if (!serviceDescription.isInitialized()) {
synchronized(SOAPService.class)
                {
                        if (!serviceDescription.isInitialized()){               
                
                            if (pivotHandler instanceof BasicProvider) {
                                
((BasicProvider)pivotHandler).initServiceDesc(this, msgContext);
                            }            
                           
                        }
                }
}

> Fine-grained lock is required in public synchronized ServiceDesc 
> getInitializedServiceDesc 
> -------------------------------------------------------------------------------------------
>
>                 Key: AXIS-2826
>                 URL: https://issues.apache.org/jira/browse/AXIS-2826
>             Project: Axis
>          Issue Type: Bug
>          Components: WSDL processing
>    Affects Versions: 1.3, 1.4
>         Environment: Weblogic 8.1/9.2, SunOS
>            Reporter: Jaganmohan Reddy
>         Attachments: SOAPService.java
>
>
> The below exception is getting for all web service requests.
> 201109 23:18:30,187 [DEBUG][org.apache.axis.utils.NSStack   ][queue: 
> 'default'] NSPop (empty)
> AxisFault
>  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
>  faultSubcode: 
>  faultString: java.lang.NullPointerException
>  faultActor: 
>  faultNode: 
>  faultDetail: 
>       {http://xml.apache.org/axis/}stackTrace:java.lang.NullPointerException
>       at 
> org.apache.axis.description.JavaServiceDesc.loadServiceDescByIntrospection(JavaServiceDesc.java:901)
>       at 
> org.apache.axis.description.JavaServiceDesc.loadServiceDescByIntrospection(JavaServiceDesc.java:846)
>       at 
> org.apache.axis.description.JavaServiceDesc.initQNameMap(JavaServiceDesc.java:544)
>       at 
> org.apache.axis.description.JavaServiceDesc.getOperationsByQName(JavaServiceDesc.java:484)
>       at 
> org.apache.axis.MessageContext.getPossibleOperationsByQName(MessageContext.java:243)
>       at 
> org.apache.axis.message.BodyBuilder.onStartChild(BodyBuilder.java:132)
>       at 
> org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
>       at org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1289)
>       at 
> org.apache.xerces.framework.XMLParser.callStartElement(XMLParser.java:1922)
>       at 
> org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentScanner.java:1831)
>       at 
> org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1223)
>       at 
> org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
>       at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1208)
>       at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
>       at 
> org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
>       at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
>       at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
>       at 
> org.apache.axis.server.AxisServer.initSOAPConstants(AxisServer.java:345)
>       at org.apache.axis.server.AxisServer.invoke(AxisServer.java:279)
>       at 
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>       at 
> org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> My observations are for every request to WSDL/API, the below is the stack 
> trace  for initializing operations list. Now four requests came for service 
> parallelly and processing started by ExecuteThreads: '11' , 12, 13, 14. In 
> this flow method  'SOAPService.getInitializedServiceDesc' is already 
> synchronized, so we can expect only one thread allowed inside but here four 
> threads are entering with the same instance of 
> JavaServiceDesc(org.apache.axis.description.javaserviced...@e94a8) 
> WSDDService calling SOAPService.getInitializedServiceDesc and 
> WSDDService/SOAPService are not  static or singleton classes. Every time new 
> instance of SOAPService is created and breaking thread safety.
> If AxisServlet.doGet called parellelly from different IP addresses then 
> multiple threads loading 'operations' ArrayList parellelly and duplicate 
> entries adding. This list size showing differently for every restart. Some 
> times values are overriding with null by other threads.
> Stack Trace:
> org.apache.axis.description.JavaServiceDesc.createOperationForMethod(JavaServiceDesc.java:1331)
>  
> org.apache.axis.description.JavaServiceDesc.createOperationsForName(JavaServiceDesc.java:1188)
>  
> org.apache.axis.description.JavaServiceDesc.getSyncedOperationsForName(JavaServiceDesc.java:1150)
>  
> org.apache.axis.description.JavaServiceDesc.loadServiceDescByIntrospectionRecursive(JavaServiceDesc.java:997)
>  
> org.apache.axis.description.JavaServiceDesc.loadServiceDescByIntrospection(JavaServiceDesc.java:922)
>  
> org.apache.axis.providers.java.JavaProvider.initServiceDesc(JavaProvider.java:477)
>  
> org.apache.axis.handlers.soap.SOAPService.getInitializedServiceDesc(SOAPService.java:285)
>  
> org.apache.axis.deployment.wsdd.WSDDService.makeNewInstance(WSDDService.java:503)
>  
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:274)
>  
> org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:260)
>  
> org.apache.axis.deployment.wsdd.WSDDDeployment.getService(WSDDDeployment.java:427)
>  
> org.apache.axis.configuration.FileProvider.getService(FileProvider.java:231) 
> org.apache.axis.AxisEngine.getService(AxisEngine.java:311) 
> org.apache.axis.MessageContext.setTargetService(MessageContext.java:758) 
> org.apache.axis.handlers.http.URLMapper.invoke(URLMapper.java:50) 
> org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
>  
> org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 
> org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 
> org.apache.axis.server.AxisServer.invoke(AxisServer.java:239) 
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) 
> SOAPService.getInitializedServiceDesc  with more debugs:
>  /** 
>      * Returns a service description with the implementation class filled in. 
>      * Syncronized to prevent simutaneous modification of serviceDescription. 
>      */ 
>    public synchronized ServiceDesc getInitializedServiceDesc( 
>                                                      MessageContext 
> msgContext) 
>             throws AxisFault { 
>                
>       count++;         
>        if (log.isDebugEnabled()) { 
>              
> log.debug("serviceDescription.isInitialized():"+serviceDescription.isInitialized()+",count:"+count+",this:"+this);
>    
>          }    
>         if (!serviceDescription.isInitialized()) { 
>             // Let the provider do the work of filling in the service 
>             // descriptor.  This is so that it can decide itself how best 
>             // to map the Operations.  In the future, we may want to support 
>             // providers which don't strictly map to Java class backends 
>             // (BSFProvider, etc.), and as such we hand off here. 
>             if (pivotHandler instanceof BasicProvider) { 
>                 ((BasicProvider)pivotHandler).initServiceDesc(this, 
> msgContext); 
>             } 
>         } 
>         if (log.isDebugEnabled()) { 
>             log.debug("end of 
> serviceDescription"+serviceDescription.isInitialized()+",count:"+count+",this:"+this);
>  
>         } 
>         return serviceDescription; 
>     } 
> axis logs :
> 181209 19:18:08,903 [DEBUG][e.axis.handlers.soap.SOAPService][ExecuteThread: 
> '11' for queue: 'default'] 
> serviceDescription.isInitialized():false,count:1,this:org.apache.axis.han 
> dlers.soap.soapserv...@c3da75 
> 181209 19:18:08,903 [DEBUG][e.axis.handlers.soap.SOAPService][ExecuteThread: 
> '12' for queue: 'default'] 
> serviceDescription.isInitialized():false,count:1,this:org.apache.axis.handlers.soap.soapserv...@3b7230
>  
> 181209 19:18:08,904 [DEBUG][e.axis.handlers.soap.SOAPService][ExecuteThread: 
> '13' for queue: 'default'] 
> serviceDescription.isInitialized():false,count:1,this:org.apache.axis.handlers.soap.soapserv...@1255c01
>  
> 181209 19:18:08,904 [DEBUG][e.axis.handlers.soap.SOAPService][ExecuteThread: 
> '14' for queue: 'default'] 
> serviceDescription.isInitialized():false,count:1,this:org.apache.axis.handlers.soap.soapserv...@1bb660a
>  
> 181209 19:18:08,906 [DEBUG][axis.providers.java.JavaProvider][ExecuteThread: 
> '11' for queue: 'default'] JavaServiceDesc 
> instanceorg.apache.axis.description.javaserviced...@e94a8 8 
> 181209 19:18:08,906 [DEBUG][axis.providers.java.JavaProvider][ExecuteThread: 
> '14' for queue: 'default'] JavaServiceDesc 
> instanceorg.apache.axis.description.javaserviced...@e94a8 8 
> 181209 19:18:08,906 [DEBUG][axis.providers.java.JavaProvider][ExecuteThread: 
> '12' for queue: 'default'] JavaServiceDesc 
> instanceorg.apache.axis.description.javaserviced...@e94a8 8 
> 181209 19:18:08,906 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '11' for queue: 'default'] Array List operations:[]  size:0  implClass:class 
> com.mformation.services .axis.MM7BackwardService 
> 181209 19:18:08,906 [DEBUG][axis.providers.java.JavaProvider][ExecuteThread: 
> '13' for queue: 'default'] JavaServiceDesc 
> instanceorg.apache.axis.description.javaserviced...@e94a8 8 
> 181209 19:18:08,907 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '11' for queue: 'default'] Before loadServiceDescByIntrospectionRecursive  
> Array List operations:[] size:0 
> 181209 19:18:08,907 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '14' for queue: 'default'] Array List operations:[]  size:0  implClass:class 
> com.mformation.services .axis.MM7BackwardService 
> 181209 19:18:08,907 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '11' for queue: 'default'] loadServiceDescByIntrospectionRecursive  
> implClass:class com.mformation.s ervices.axis.MM7BackwardService 
> methods:[Ljava.lang.reflect.Method;@1c62af 
> 181209 19:18:08,907 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '12' for queue: 'default'] Array List operations:[]  size:0  implClass:class 
> com.mformation.services .axis.MM7BackwardService 
> 181209 19:18:08,908 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '11' for queue: 'default'] isSkeletonClass:false,methodName:deliveryReportReq 
> 181209 19:18:08,908 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '14' for queue: 'default'] Before loadServiceDescByIntrospectionRecursive  
> Array List operations:[] size:0 
> 181209 19:18:08,909 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '14' for queue: 'default'] loadServiceDescByIntrospectionRecursive  
> implClass:class com.mformation.s ervices.axis.MM7BackwardService 
> methods:[Ljava.lang.reflect.Method;@192cf37 
> 181209 19:18:08,909 [DEBUG][e.axis.description.OperationDesc][ExecuteThread: 
> '11' for queue: 'default'] 
> @1624896setReturnType({http://www.w3.org/2001/XMLSchema}int) 
> 181209 19:18:08,909 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '14' for queue: 'default'] isSkeletonClass:false,methodName:deliveryReportReq 
> 181209 19:18:08,908 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '12' for queue: 'default'] Before loadServiceDescByIntrospectionRecursive  
> Array List operations:[] 
>  size:0 
> 181209 19:18:08,910 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '12' for queue: 'default'] loadServiceDescByIntrospectionRecursive  
> implClass:class com.mformation.s ervices.axis.MM7BackwardService 
> methods:[Ljava.lang.reflect.Method;@18bad15 
> 181209 19:18:08,910 [DEBUG][axis.description.JavaServiceDesc][ExecuteThread: 
> '12' for queue: 'default'] isSkeletonClass:false,methodName:deliveryReportReq 
> Fine-grain lock will gives the solution for this.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to