2011-06-17 6 views
5

Ten problem nie został rozwiązany od 3 dni, bardzo doceniany, jeśli ktoś może pomóc, oto cały kod poniżej.Lokalizacja schematu Xsd nie znajduje się w pliku WSDL

Problem polega na tym, że ta usługa sieciowa działa dobrze, jeśli pokazuję plik wsdl (który znajduje się w katalogu projektu Eclipse) na soapUI z dysku twardego. Ale to nie może znaleźć pliku schematu Zapytanie jeśli dam url jak:

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

to narazić WSDL poprawnie, ale nie mogę znaleźć schematu, pojawia się błąd z SoapUI:

błąd: Nie można załadować url [http: // localhost: 8080/MWP/MWS/Request.xsd]

jest to plik wiosna config

<?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> 

to jest plik WSDL:

<?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>     

i to w jaki sposób zdefiniować w 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> 

Odpowiedz

8

Zmiana:

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

do:

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

powinien uzyskać rozdzielczość schematu pliku Request.xsd do pracy. MessageDispatcherServlet szuka typów XsdSchema i rozpatruje żądanie XSD do schematu na podstawie identyfikatora/nazwy.

+0

Wow, chciałbym ci dać 100 punktów za to, Tnx działa teraz! Czy mój Response.xsd jest tak ważny jak Request.xsd podczas tworzenia wsdl? Ponieważ sprawdzam tylko request.xml, response.xsd jest czymś dla klientów, których szukają i wie, jak wygląda odpowiedź? – Spring