In the ws outbound gateway ,the AbstractWebServiceOutboundGateway use a WebServiceTemplate to send and receive soapmessages.
But i find a problem ,When using WebServiceTemplate to send soapmessage to a same uri,every time it creates a new WebServiceConnection .
So if i send 10000 times soap message to a same uri 'http://localhost:8080/echo/echoService',the method createConnection() is invoked 10000 times.
But i want it just invokes the method createConnection() one time ,not 10000 times.
Is this the WebServiceTemplate bug ?
the WebServiceTemplate code is :
connection = createConnection(URI.create(uriString));
Code:public Object sendAndReceive(String uriString, WebServiceMessageCallback requestCallback, WebServiceMessageExtractor responseExtractor) { Assert.notNull(responseExtractor, "'responseExtractor' must not be null"); Assert.hasLength(uriString, "'uri' must not be empty"); TransportContext previousTransportContext = TransportContextHolder.getTransportContext(); WebServiceConnection connection = null; try { connection = createConnection(URI.create(uriString));//<--- this is here TransportContextHolder.setTransportContext(new DefaultTransportContext(connection)); MessageContext messageContext = new DefaultMessageContext(getMessageFactory()); return doSendAndReceive(messageContext, connection, requestCallback, responseExtractor); } catch (TransportException ex) { throw new WebServiceTransportException("Could not use transport: " + ex.getMessage(), ex); } catch (IOException ex) { throw new WebServiceIOException("I/O error: " + ex.getMessage(), ex); } finally { TransportUtils.closeConnection(connection); TransportContextHolder.setTransportContext(previousTransportContext); } }


Reply With Quote
