Hi, axis.
Is Axis(beta2) Client thread safe? How can
I use AxisClient in
multi-thread? I have a problem that SOAPBodyElement is broken by executing Call.invoke() under multi-thread environment. It seems not to resolve recent cvs snapshots. Here is message: java.lang.NullPointerException
at org.apache.xerces.dom.ParentNode.nodeListGetLength(ParentNode.java:739) at org.apache.xerces.dom.ParentNode.getLength(ParentNode.java:751) at org.apache.axis.encoding.SerializationContextImpl.writeDOMElement(SerializationContextImpl.java:913) at org.apache.axis.message.MessageElement.outputImpl(MessageElement.java:661) at org.apache.axis.message.MessageElement.output(MessageElement.java:651) at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:382) at org.apache.axis.message.MessageElement.output(MessageElement.java:651) at org.apache.axis.SOAPPart.getAsString(SOAPPart.java:379) at org.apache.axis.SOAPPart.getAsBytes(SOAPPart.java:306) at org.apache.axis.Message.getContentLength(Message.java:334) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:382) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:154) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:121) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:174) at org.apache.axis.client.Call.invoke(Call.java:1905) at org.apache.axis.client.Call.invoke(Call.java:1155) I haven't resolved it completely but at least, I doubt dbf(DocumentBuilder) and saxFactory(SAXParserFactory) at XMLUtils.java is thread unsafe by following description: http://xml.apache.org/xalan-j/apidocs/javax/xml/parsers/SAXParserFactory.html
> An implementation of the SAXParserFactory class is NOT guaranteed to > be thread safe. http://xml.apache.org/xalan-j/apidocs/javax/xml/parsers/DocumentBuilder.html
> An implementation of the DocumentBuilderFactory class is NOT > guaranteed to be thread safe. I attached a patch for it.
regards,
Takashi Okamoto [EMAIL PROTECTED]
NTTDATA Coop. R&D Headquarters --- XMLUtils.java.orig 2002-06-11 17:17:12.000000000 +0900 +++ XMLUtils.java 2002-06-11 17:20:32.000000000 +0900 @@ -193,7 +193,9 @@ return (SAXParser )saxParsers.pop(); } try { + synchronized (saxFactory) { return saxFactory.newSAXParser(); + } } catch
(ParserConfigurationException e)
{
log.error(JavaUtils.getMessage("parserConfigurationException00"), e ); @@ -230,7 +232,9 @@ public static Document newDocument()
{
try { - return dbf.newDocumentBuilder().newDocument(); + synchronized (dbf) { + return dbf.newDocumentBuilder().newDocument(); + } } catch (Exception e) { return null; } @@ -238,7 +242,9 @@ public static Document newDocument(InputSource
inp) {
try { - DocumentBuilder db = dbf.newDocumentBuilder(); + synchronized (dbf) { + DocumentBuilder db = dbf.newDocumentBuilder(); + } db.setErrorHandler( new ParserErrorHandler() ); return( db.parse( inp ) ); } |
- Re: Is axis client thread safe?(with patch) Takashi Okamoto