1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.transport.http;
18
19 import java.io.IOException;
20 import java.net.URI;
21 import java.net.URISyntaxException;
22 import java.util.HashMap;
23 import java.util.Map;
24 import javax.servlet.ServletException;
25 import javax.servlet.http.HttpServlet;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28 import javax.xml.soap.MessageFactory;
29
30 import org.springframework.context.support.StaticApplicationContext;
31 import org.springframework.util.FileCopyUtils;
32 import org.springframework.ws.MockWebServiceMessage;
33 import org.springframework.ws.WebServiceMessage;
34 import org.springframework.ws.soap.saaj.SaajSoapMessage;
35 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
36 import org.springframework.ws.transport.WebServiceConnection;
37 import org.springframework.ws.transport.support.FreePortScanner;
38
39 import org.apache.commons.httpclient.ConnectTimeoutException;
40 import org.apache.commons.httpclient.URIException;
41 import org.junit.Test;
42 import org.mortbay.jetty.Server;
43 import org.mortbay.jetty.servlet.Context;
44 import org.mortbay.jetty.servlet.ServletHolder;
45
46 public class CommonsHttpMessageSenderIntegrationTest extends AbstractHttpWebServiceMessageSenderIntegrationTestCase {
47
48 @Override
49 protected AbstractHttpWebServiceMessageSender createMessageSender() {
50 return new CommonsHttpMessageSender();
51 }
52
53 @Test
54 public void testMaxConnections() throws URISyntaxException, URIException {
55 CommonsHttpMessageSender messageSender = new CommonsHttpMessageSender();
56 messageSender.setMaxTotalConnections(2);
57 Map<String, String> maxConnectionsPerHost = new HashMap<String, String>();
58 maxConnectionsPerHost.put("https://www.example.com", "1");
59 maxConnectionsPerHost.put("http://www.example.com:8080", "7");
60 maxConnectionsPerHost.put("www.springframework.org", "10");
61 maxConnectionsPerHost.put("*", "5");
62 messageSender.setMaxConnectionsPerHost(maxConnectionsPerHost);
63 }
64
65 @Test
66 public void testContextClose() throws Exception {
67 MessageFactory messageFactory = MessageFactory.newInstance();
68 int port = FreePortScanner.getFreePort();
69 Server jettyServer = new Server(port);
70 Context jettyContext = new Context(jettyServer, "/");
71 jettyContext.addServlet(new ServletHolder(new EchoServlet()), "/");
72 jettyServer.start();
73 WebServiceConnection connection = null;
74 try {
75
76 StaticApplicationContext appContext = new StaticApplicationContext();
77 appContext.registerSingleton("messageSender", CommonsHttpMessageSender.class);
78 appContext.refresh();
79
80 CommonsHttpMessageSender messageSender = appContext
81 .getBean("messageSender", CommonsHttpMessageSender.class);
82 connection = messageSender.createConnection(new URI("http://localhost:" + port));
83
84 appContext.close();
85
86 connection.send(new SaajSoapMessage(messageFactory.createMessage()));
87 connection.receive(new SaajSoapMessageFactory(messageFactory));
88 }
89 finally {
90 if (connection != null) {
91 try {
92 connection.close();
93 } catch (IOException ex) {
94
95 }
96 }
97 if (jettyServer.isRunning()) {
98 jettyServer.stop();
99 }
100 }
101
102 }
103
104 private class EchoServlet extends HttpServlet {
105
106 @Override
107 protected void doPost(HttpServletRequest request, HttpServletResponse response)
108 throws ServletException, IOException {
109 response.setContentType("text/xml");
110 FileCopyUtils.copy(request.getInputStream(), response.getOutputStream());
111
112 }
113 }
114
115
116 }