Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: Grails-SpringWS 0.2
-
Fix Version/s: Grails-SpringWS 0.2.1
-
Component/s: None
-
Labels:None
Description
From an original patch from Okke Tijhuis:
When you get a lot of simultaneous request (tested with SoapUI with multiple threads) the xml messages
get garbled when the messages are transformed. It looks like the transformer class isn't threadsafe.
Original code:
public class DefaultEndpointAdapter extends AbstractEnpointAdapter {
private final Transformer transformer
public DefaultEndpointAdapter() { this.transformer = TransformerFactory.newInstance().newTransformer() }
protected Object createRequest(Source request) throws Exception { StringResult result = new StringResult() transformer.transform(request, result) return new XmlSlurper().parseText(result.toString()) }
protected Writer createResponseWriter() {
return new StringWriter()
}
protected Object createResponse(Writer writer) {
return new MarkupBuilder(writer)
}
}
When I change the code to the following the problem is gone:
public class DefaultEndpointAdapter extends AbstractEnpointAdapter {
private final TransformerFactory factory
public DefaultEndpointAdapter() {
this.factory = TransformerFactory.newInstance()
}
protected Object createRequest(Source request) throws Exception {
Transformer transformer = factory.newTransformer()
StringResult result = new StringResult()
transformer.transform(request, result)
return new XmlSlurper().parseText(result.toString())
}
protected Writer createResponseWriter() { return new StringWriter() } }
protected Object createResponse(Writer writer) {
return new MarkupBuilder(writer)
}
}
Patched in release 0.2.1