[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rampart-dev
Subject:    [jira] [Created] (AXIS2-5840) http-Transport: Request  for static WSDL does not work with syntax "se
From:       "Thorsten Kitz (JIRA)" <jira () apache ! org>
Date:       2017-03-09 8:53:37
Message-ID: JIRA.13049534.1489049564000.20291.1489049617920 () Atlassian ! JIRA
[Download RAW message or body]

Thorsten Kitz created AXIS2-5840:
------------------------------------

             Summary: http-Transport: Request  for static WSDL does not work with \
syntax "serviceName?wsdl"  Key: AXIS2-5840
                 URL: https://issues.apache.org/jira/browse/AXIS2-5840
             Project: Axis2
          Issue Type: Bug
          Components: transports
    Affects Versions: 1.7.4
            Reporter: Thorsten Kitz
            Priority: Minor


Since we upgraded our Axis2 framework from version 1.5.x to 1.7.4 it is no longer \
possible to get a *static* WSDL using the syntax <ServiceURL>?wsdl. Regardless of the \
location of the wsdl-file itself, the returned message is either an error text or a \
generated wsdl by Axis2 (if you turn the "useOriginalwsdl" parameter in the \
services.xml file to true). The cause of the bug is somewhere either in the \
AxisServlet or in the AxisService classes.

First the request executes the AxisServlet.doGet(HttpServletRequest request,
HttpServletResponse response) class:

{code:java}
... starting line number 275 ...
        if ((query != null) && new \
QueryStringParser(query).search(metadataQueryParamNames)) {  // handling meta data \
exchange stuff  agent.processListService(request, response);
        } else if (HttpUtils.endsWithIgnoreCase(requestURI , ".xsd") ||
                HttpUtils.endsWithIgnoreCase(requestURI, ".wsdl")) {
            agent.processExplicitSchemaAndWSDL(request, response);
...
{code}

The "metadataQueryParameterNames" are ["wsdl","xsl","wsdl2","policy"], so the first \
if-branch is taken (unless you write <service-URL>/service-name.wsdl, then the first \
else statement is taken). The following code fragment is in the class ListingAgent \
(starting line 297):

{code:java}
    private void handleWSDLRequest(HttpServletRequest req,
                                   HttpServletResponse res,
                                   String url,
                                   AxisService axisService) throws IOException {
        if (!canExposeServiceMetadata(axisService)){
            res.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }
        OutputStream out = res.getOutputStream();
        res.setContentType("text/xml");
        String ip = extractHost(url);
        String wsdlName = getParamtereIgnoreCase(req , "wsdl");

        if (wsdlName != null && wsdlName.length()>0) {
            axisService.printUserWSDL(out, wsdlName, ip);
        } else {
            axisService.printWSDL(out, ip);
        }
    }
{code}

Since there is no "wsdlName" in the GET-request, the else branch calls the 2 \
parameter "printWSDL" method in the AxisService class:

{code:java}
	public void printWSDL(OutputStream out, String requestIP) throws AxisFault {
		// If we're looking for pre-existing WSDL, use that.
		if (isUseUserWSDL()) {
			printUserWSDL(out, null, requestIP);
			return;
		}
...
{code}

"useOriginalwsdl" is a parameter in the services.xml and is set to "true", therefor

{code:java}
	public void printUserWSDL(OutputStream out, String wsdlName, String ip)
			throws AxisFault {
		Definition definition = null;
		// first find the correct wsdl definition
		Parameter wsdlParameter = getParameter(WSDLConstants.WSDL_4_J_DEFINITION);
		if (wsdlParameter != null) {
			definition = (Definition) wsdlParameter.getValue();
		}

		if (definition != null) {
			try {
				printDefinitionObject(getWSDLDefinition(definition, wsdlName),
						out, ip);
			} catch (WSDLException e) {
				throw AxisFault.makeFault(e);
			}
		} else {
			printWSDLError(out);
		}

	}
{code}

is called. 

There seems to be no way, that

{code:java}
getParameter(WSDLConstants.WSDL_4_J_DEFINITION)
{code}

ever returns a not null "Parameter object" in this scenario, therefor the \
"printWSDLError()" is called and the error message is returned to the caller.

This bug is easily reproducable in any scenario.




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic