/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.jaxws.samples.servlet; import org.apache.axis2.jaxws.samples.client.SampleClient; import org.apache.axis2.jaxws.ClientConfigurationFactory; import org.apache.axis2.metadata.registry.MetadataFactoryRegistry; import org.apache.axis2.deployment.FileSystemConfigurator; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URL; import java.net.MalformedURLException; /** * EchoPingSampleServlet main entry point for JSP servlet */ public class EchoPingSampleServlet extends HttpServlet implements Servlet { private static final int TIMEOUT = 240; // Async timeout private static final long serialVersionUID = 1039362106123493799L; private static final String CONTEXT_BASE = "/jaxws-samples/services/"; private static final String PING_CONTEXT = CONTEXT_BASE + "PingService.PingServicePort"; private static final String ECHO_CONTEXT = CONTEXT_BASE + "EchoService.EchoServicePort"; private static final String PING_CONTEXT12 = CONTEXT_BASE + "PingService12.PingService12Port"; private static final String ECHO_CONTEXT12 = CONTEXT_BASE + "EchoService12.EchoService12Port"; private static final String INDEX_JSP_LOCATION = "/WEB-INF/jsp/demoEchoPing.jsp"; private static final String PING_RESPONSE_GOOD = "Message delivered successfully. Please check server logs to confirm message delivery."; private static final String PING_RESPONSE_BAD = "ERROR: Failure in client before message delivery."; private String uriString = ""; private String soapString = ""; private int count = 1; private ClientConfigurationFactory factory = null; public EchoPingSampleServlet() { super(); } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } /** * processRequest Reads the posted parameters and calls the service */ private void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(factory == null) { String path = getServletConfig().getServletContext().getRealPath("/WEB-INF/axis2.xml"); FileSystemConfigurator configurator = new FileSystemConfigurator(null, path); factory = new ClientConfigurationFactory(configurator); MetadataFactoryRegistry.setFactory(ClientConfigurationFactory.class, factory); } ServletContext context = getServletContext(); String msgString = req.getParameter("msgstring"); String svc = req.getParameter("msgservice"); String cnt = req.getParameter("msgcount"); String result = ""; req.setAttribute("PingSelected", " "); req.setAttribute("EchoSelected", " "); req.setAttribute("AsyncSelected", " "); req.setAttribute("AsyncWireSelected", " "); if (null == msgString || "" == msgString) { // Set up the default values to use uriString = "http://localhost:" + req.getServerPort(); soapString = ""; formatOutput(req, uriString, "", ""); req.setAttribute("uridef", uriString); req.setAttribute("soapdef", soapString); req.setAttribute("messageS", " "); req.setAttribute("messageR", " "); req.setAttribute("msgcount", new Integer(count).toString()); req.setAttribute("PingSelected", "selected"); context.getRequestDispatcher(INDEX_JSP_LOCATION).forward(req, resp); } else { // Get the parms from the request uriString = req.getParameter("uri"); soapString = req.getParameter("soap12"); if (null != soapString) { soapString = "checked"; } else { soapString = ""; } // Get count if ((null != cnt) && ("" != cnt)) { count = new Integer(cnt).intValue(); } // Set the values to be on the refreshed page req.setAttribute("msgstring", req.getAttribute("msgstring")); req.setAttribute("uridef", uriString); req.setAttribute("soapdef", soapString); req.setAttribute("msgcount", new Integer(count).toString()); req.setAttribute(svc + "Selected", "selected"); // Now call the service SampleClient client = new SampleClient(); client.setClientConfigurationFactory(factory); System.out.println(">> SERVLET: Request count = " + count); // Loop on the count for (int index = 0; index < count; index++) { System.out.println(">> SERVLET: Request index: " + (index + 1)); if (0 == soapString.length()) { if (svc.equalsIgnoreCase(("Async"))) { result += client.buildAsync(uriString + ECHO_CONTEXT, getWSDLURL("/WEB-INF/wsdl/Echo.wsdl"), msgString, TIMEOUT, false); } else if (svc.equalsIgnoreCase(("AsyncWire"))) { result += client.buildAsync(uriString + ECHO_CONTEXT, getWSDLURL("/WEB-INF/wsdl/Echo.wsdl"), msgString, TIMEOUT, true); } else if (svc.equalsIgnoreCase("Echo")) { result += client.buildEcho(uriString + ECHO_CONTEXT, getWSDLURL("/WEB-INF/wsdl/Echo.wsdl"), msgString); } else { if (client.buildPing(uriString + PING_CONTEXT, getWSDLURL("/WEB-INF/wsdl/Ping.wsdl"), msgString)) { result += PING_RESPONSE_GOOD; } else { result += PING_RESPONSE_BAD; } } } else // SOAP1.2 { if (svc.equalsIgnoreCase(("Async"))) { result += client.buildAsync12(uriString + ECHO_CONTEXT12, getWSDLURL("/WEB-INF/wsdl/Echo12.wsdl"), msgString, TIMEOUT, false); } else if (svc.equalsIgnoreCase(("AsyncWire"))) { result += client.buildAsync12(uriString + ECHO_CONTEXT12, getWSDLURL("/WEB-INF/wsdl/Echo12.wsdl"), msgString, TIMEOUT, true); } else if (svc.equalsIgnoreCase("Echo")) { result += client.buildEcho12(uriString + ECHO_CONTEXT12, getWSDLURL("/WEB-INF/wsdl/Echo12.wsdl"), msgString); } else { if (client.buildPing12(uriString + PING_CONTEXT12, getWSDLURL("/WEB-INF/wsdl/Ping12.wsdl"), msgString)) { result += PING_RESPONSE_GOOD; } else { result += PING_RESPONSE_BAD; } } } result += "\n"; } // Format the output and refresh the panel formatOutput(req, uriString, msgString, result); context.getRequestDispatcher(INDEX_JSP_LOCATION).forward(req, resp); } } /** * formatOutput Format the transaction data into the HTML text area */ private void formatOutput(HttpServletRequest req, String endpointURL, String request, String received) { req.setAttribute("messageS", "\n" + "Connecting to... " + endpointURL + "\n\n" + "Message Request: \n" + request + "\n"); req.setAttribute("messageR", "\n" + "Message Response: \n" + received + "\n"); } private URL getWSDLURL(String file) throws MalformedURLException { return getServletConfig().getServletContext().getResource(file); } }