import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public class _testfiles_2F_jspInJavascript2_2E_jsp extends javax.servlet.http.HttpServlet{
String testJspString = "testJspString"; 

public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
		throws java.io.IOException, javax.servlet.ServletException {
javax.servlet.jsp.PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, JspWriter.DEFAULT_BUFFER, true);
javax.servlet.ServletContext application = pageContext.getServletContext();
javax.servlet.ServletConfig config = pageContext.getServletConfig();
javax.servlet.jsp.JspWriter out = pageContext.getOut();
Object page = this;
javax.servlet.http.HttpSession session = pageContext.getSession();

try {
{out.print("");} //markup
{out.print("");} //markup
out.print( testJspString );
{out.print("");} //markup
  
{out.print("");} //markup

        if( request.getAttribute("SoapURL") != null )
        {
        
out.print( (String)request.getAttribute("SoapURL"));

        }
        else
        { 
        
{out.print("");} //markup
 } 
{out.print("");} //markup
 } catch (java.lang.Exception e) {} 
}}