Xsd schema location can not be found in WSDL file

17,476

Changing:

<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
    <property name="xsd" value="classpath:/wsdl/Request.xsd" />
</bean>

to:

<bean id="Request" class="org.springframework.xml.xsd.SimpleXsdSchema">
    <property name="xsd" value="classpath:/wsdl/Request.xsd" />
</bean>

should get the schema resolution of Request.xsd to work. The MessageDispatcherServlet looks for XsdSchema types and resolves the request for a xsd to the schema based on the id/name.

Share:
17,476
Spring
Author by

Spring

Updated on June 19, 2022

Comments

  • Spring
    Spring almost 2 years

    This problem still not solved since 3 days, really appreciated if someone can help, here is all the code below.

    Problem is: this web service works well if I show the wsdl file (which is in my eclipse project directory) to the soapUI from hard disc. But it can not find the Request schema file if I give the url as:

    http://localhost:8080/mwp/mws/mwsid.wsdl
    

    This expose the wsdl correctly but cant find the schema, I get the error from soapUI:

    ERROR:Failed to load url [http://localhost:8080/mwp/mws/Request.xsd]

    this is the spring config file

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sws="http://www.springframework.org/schema/web-services"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
    <description>
    </description>
    
    <bean id="webServicePluginDescriptor"
        class="com.mywebsite.ws.configuration.mtchWebservicePluginDescriptor" />
    
    <bean id="payloadMapping"
          class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
        <property name="defaultEndpoint" ref="inferenceEndPoint" />
        <property name="interceptors">
            <list>
                <ref local="validatingInterceptor" />
                <ref local="payLoadInterceptor" />
            </list>
        </property>
    </bean>
    
    <bean id="payLoadInterceptor"
        class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
    
    <bean id="validatingInterceptor"
        class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
    
        <property name="schema"
            value="classpath:/wsdl/Request.xsd" />
        <property name="validateRequest" value="true" />
        <property name="validateResponse" value="false" />
    </bean>
    
    <bean id="PropertyResource" class="com.mywebsite.ws.im.PropertyResource">
        <property name="resource"
            value="/WEB-INF/client-specific/InferenceMachine.properties" />
    </bean>
    
    <bean id="inferenceEndPoint" class="com.mywebsite.ws.web.InferenceEndPoint">
        <property name="messageWebService" ref="messageWebService" />
    </bean>
    
    <bean id="messageWebService" class="com.mywebsite.ws.service.MessageWebService"
        scope="request">
        <aop:scoped-proxy />
        <property name="inferenceService" ref="inferenceService" />
    </bean>
    
    <bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
        <property name="xsd" value="classpath:/wsdl/Request.xsd" />
    </bean>
    
    <bean id="mwsid"
        class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
        <constructor-arg value="classpath:/wsdl/mtchwsdl.wsdl" />
    </bean>
    
    <bean id="inferenceService" class="com.mywebsite.ws.im.InferenceService"
        scope="request">
        <aop:scoped-proxy />
        <property name="webServiceConfiguration" ref="wsPlayerConfiguration" />
    
        <property name="properties">
            <bean class="com.mywebsite.ws.im.PropertyResource">
                <property name="resource"
                    value="/WEB-INF/client-specific/InferenceMachine.properties" />
            </bean>
        </property>
    </bean>
    
    <!-- ~~~~~~~ Application beans ~~~~~~~ -->
    <bean id="wsPlayerConfiguration"
        class="com.mywebsite.ws.configuration.WebServiceConfiguration"
        scope="request">
        <aop:scoped-proxy />
        <property name="playerConfiguration" ref="playerConfiguration"></property>
        <property name="configurationSetup" ref="configurationSetup"></property>
    </bean>
    

    this is the wsdl file:

     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:schema="http://www.mywebsitex.com/xml/webservice"
                  xmlns:tns="http://www.mywebsitex.com/xml/webservice"
                  targetNamespace="http://www.mywebsitex.com/xml/webservice">
    
    
    <wsdl:types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:import namespace="http://www.mywebsitex.com/xml/webservice"                      
                schemaLocation="Request.xsd"/>
        </xsd:schema>
    
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:import namespace="http://www.mywebsitex.com/xml/webservice"                      
                schemaLocation="Response.xsd"/>
        </xsd:schema>
    
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:import namespace="http://www.mywebsitex.com/xml/webservice"                      
                schemaLocation="Error.xsd"/>
        </xsd:schema>
    </wsdl:types>
    
    
    <wsdl:message name="inferencerequest">                                                 
        <!-- <wsdl:part element="schema:inferencerequest" name="inferencerequest"/> -->               
    </wsdl:message>
    <wsdl:message name="inferenceresponse">                                                 
        <!-- <wsdl:part element="schema:inferenceresponse" name="inferenceresponse"/> -->               
    </wsdl:message>
    <wsdl:message name="errorresponse">                                                 
        <!-- <wsdl:part element="schema:errorresponse" name="errorresponse"/> -->               
    </wsdl:message>
    
    <wsdl:portType name="mtchWS">                                                 
        <wsdl:operation name="inference">
            <wsdl:input message="tns:inferencerequest" name="inferencerequest"/>
            <wsdl:output message="tns:inferenceresponse" name="inferenceresponse"/>
            <wsdl:fault message="tns:errorresponse" name="errorresponse"/>             
        </wsdl:operation>
    </wsdl:portType>
    
    <wsdl:binding name="mtchWSBinding" type="tns:mtchWS">                  
        <soap:binding style="document"                                                   
            transport="http://schemas.xmlsoap.org/soap/http"/>                           
        <wsdl:operation name="inference">
            <soap:operation soapAction="http://www.mywebsitex.com/webservice"/>           
            <wsdl:input name="inferencerequest">
                <soap:body use="literal"/>                                               
            </wsdl:input>
            <wsdl:output name="inferenceresponse">
                <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="errorreponse">
                <!-- <soap:fault use="literal"/>-->
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    
    <wsdl:service name="mtchWSService">
        <wsdl:port binding="tns:mtchWSBinding" name="mtchWSPort">          
            <soap:address location="http://localhost:8080/mwp/mws"/>             
        </wsdl:port>
    </wsdl:service>                  
    

    and this is how I define in the web.xml:

    <servlet>
        <servlet-name>mws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
                <param-value>classpath:/resources/mtchwebservice/applicationContext-MtchWebService.xml</param-value>
        </init-param>
    
        <init-param>
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    
        <load-on-startup>2</load-on-startup>
    </servlet>
    
  • Spring
    Spring almost 13 years
    Wow, I would like to give you a 100 point for this, Tnx working now! Is my Response.xsd is as importtant as Request.xsd while creating wsdl? Because I only validate the request.xml, response.xsd is something for clients that they look and know how a response looks like?