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