此问题自3天后仍未解决,如果有人可以提供帮助,我真的很感激,以下是所有代码。
问题是:如果我将硬盘中的wsdl文件(在我的eclipse项目目录中)显示到soapUI,这个Web服务运行良好。但如果我将URL设为:
,则无法找到Request模式文件http://localhost:8080/mwp/mws/mwsid.wsdl
这正确公开wsdl但无法找到架构,我从soapUI中得到错误:
错误:无法加载网址[http:// localhost:8080 / mwp / mws / Request.xsd]
这是spring配置文件
<?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>
这是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>
这就是我在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>
答案 0 :(得分:9)
更改:
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="classpath:/wsdl/Request.xsd" />
</bean>
为:
<bean id="Request" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="classpath:/wsdl/Request.xsd" />
</bean>
应该使Request.xsd的架构解析工作。 MessageDispatcherServlet查找XsdSchema类型,并根据id / name将xsd请求解析为模式。