blob: a75fa611a7a06241954944f8fc2456a40dd9cad0 [file] [log] [blame]
/*
* 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);
}
}