I'm having an issue with my webservices that seems related to logging in
Jersey, but I'm not sure.
Sometimes when a client hangs up in the middle of serializing XML to it, my
logs will show something like this:
Oct 23, 2009 12:34:59 PM com.sun.jersey.impl.json.writer.JsonXmlStreamWriter
writeStartElement
SEVERE: null
ClientAbortException: java.io.IOException
at
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:
358)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:325)
at
org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at
org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at
org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.ja
va:89)
at
com.sun.jersey.spi.container.servlet.ServletContainer$Writer.write(ServletCo
ntainer.java:249)
at
com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.write(
ContainerResponse.java:115)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:124)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:134)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:220)
at java.io.Writer.write(Writer.java:157)
at
com.sun.jersey.impl.json.writer.JsonXmlStreamWriter$WriterAdapter.write(Json
XmlStreamWriter.java:72)
at
com.sun.jersey.impl.json.writer.JsonXmlStreamWriter.writeStartElement(JsonXm
lStreamWriter.java:398)
at
com.sun.xml.bind.v2.runtime.output.XMLStreamWriterOutput.beginStartTag(XMLSt
reamWriterOutput.java:113)
at
com.sun.xml.bind.v2.runtime.output.XmlOutputAbstractImpl.beginStartTag(XmlOu
tputAbstractImpl.java:98)
at
com.sun.xml.bind.v2.runtime.output.NamespaceContextImpl$Element.startElement
(NamespaceContextImpl.java:483)
at
com.sun.xml.bind.v2.runtime.XMLSerializer.endNamespaceDecls(XMLSerializer.ja
va:283)
at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:
674)
at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody
(SingleElementNodeProperty.java:1
50)
(that's about half the stack trace, but you get the idea).
That's fine, but what happens is that the stack trace repeats, except with
the line
at
com.sun.jersey.impl.json.writer.JsonXmlStreamWriter.writeStartElement(JsonXm
lStreamWriter.java:398)
at
com.sun.jersey.impl.json.writer.JsonXmlStreamWriter.writeStartElement(JsonXm
lStreamWriter.java:398)
repeated 2 times. Then again with that line 3 times. Then 4, 5, 6 and so
on, until I get a stack overflow. By that time the line is repeating many
hundreds of times and my log file has ballooned by about 6 GB per
occurrence.
The app recovers after the stack overflow but while it's occurring it slows
to a crawl. It takes 3-4 minutes, probably mostly disk write times to the
log file.
Any insight? My classes are pretty simple, they don't seem to have any
circular references that I can find by inspection.
Thanks,
Rod