[
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]