1   /*
2    * Copyright 2005-2012 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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.soap.saaj.SaajSoapMessage;
33  import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
34  import org.springframework.ws.transport.WebServiceConnection;
35  import org.springframework.ws.transport.support.FreePortScanner;
36  
37  import org.apache.commons.httpclient.URIException;
38  import org.junit.Test;
39  import org.mortbay.jetty.Server;
40  import org.mortbay.jetty.servlet.Context;
41  import org.mortbay.jetty.servlet.ServletHolder;
42  
43  public class HttpComponentsMessageSenderIntegrationTest extends AbstractHttpWebServiceMessageSenderIntegrationTestCase {
44  
45      @Override
46      protected AbstractHttpWebServiceMessageSender createMessageSender() {
47          return new HttpComponentsMessageSender();
48      }
49  
50      @Test
51      public void testMaxConnections() throws URISyntaxException, URIException {
52          HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
53          messageSender.setMaxTotalConnections(2);
54          Map<String, String> maxConnectionsPerHost = new HashMap<String, String>();
55          maxConnectionsPerHost.put("https://www.example.com", "1");
56          maxConnectionsPerHost.put("http://www.example.com:8080", "7");
57          maxConnectionsPerHost.put("http://www.springframework.org", "10");
58          messageSender.setMaxConnectionsPerHost(maxConnectionsPerHost);
59      }
60  
61      @Test
62      public void testContextClose() throws Exception {
63          MessageFactory messageFactory = MessageFactory.newInstance();
64          int port = FreePortScanner.getFreePort();
65          Server jettyServer = new Server(port);
66          Context jettyContext = new Context(jettyServer, "/");
67          jettyContext.addServlet(new ServletHolder(new EchoServlet()), "/");
68          jettyServer.start();
69          WebServiceConnection connection = null;
70          try {
71  
72              StaticApplicationContext appContext = new StaticApplicationContext();
73              appContext.registerSingleton("messageSender", HttpComponentsMessageSender.class);
74              appContext.refresh();
75  
76              HttpComponentsMessageSender messageSender = appContext
77                      .getBean("messageSender", HttpComponentsMessageSender.class);
78              connection = messageSender.createConnection(new URI("http://localhost:" + port));
79  
80              connection.send(new SaajSoapMessage(messageFactory.createMessage()));
81              connection.receive(new SaajSoapMessageFactory(messageFactory));
82  
83              appContext.close();
84          }
85          finally {
86              if (connection != null) {
87                  try {
88                      connection.close();
89                  } catch (IOException ex) {
90                      // ignore
91                  }
92              }
93              if (jettyServer.isRunning()) {
94                  jettyServer.stop();
95              }
96          }
97  
98      }
99  
100     private class EchoServlet extends HttpServlet {
101 
102         @Override
103         protected void doPost(HttpServletRequest request, HttpServletResponse response)
104                 throws ServletException, IOException {
105             response.setContentType("text/xml");
106             FileCopyUtils.copy(request.getInputStream(), response.getOutputStream());
107 
108         }
109     }
110 
111 
112 }