2014-10-11 63 views
2

我做了一个简单的Web服务,但是当我'尝试测试它SOAPUI它给这个错误:弹簧WS:没有终点的映射发现

WARN : [Oct-11 12:56:38,081] ws.server.EndpointNotFound - No endpoint mapping found for [SaajSoapMessage {http://www.servesy.com/api/v1/service}signupRequest] 

我没有任何想法,我应该怎么办为了使其正确,我看到了许多关于这个问题的问题,但没有找到任何解决方案。

我的弹簧-WS配置是如下: (除了该配置我也试图使简单的输入输出例子,并且 还示出了同样的警告)

的web.xml

<web-app 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/config/servesy-config.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>servesyservices</servlet-name> 
     <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>transformWsdlLocations</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>servesyservices</servlet-name> 
     <url-pattern>*.wsdl</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>servesyservices</servlet-name> 
     <url-pattern>/endpoints/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

servingy-config.xml

<beans 
    <context:component-scan base-package="com.servesy.webservices" /> 
    <sws:annotation-driven /> 


    <bean id="ServesyService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition" lazy-init="true"> 
     <property name="schemaCollection"> 
      <bean class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection"> 
       <property name="inline" value="true" /> 

        <property name="xsds"> 
         <list> 
          <value>schemas/ServesyServices.xsd</value> 
         </list> 
        </property> 

      </bean> 
     </property> 
     <property name="portTypeName" value="ServesyService"/> 
     <property name="serviceName" value="ServesyServices" /> 
     <property name="locationUri" value="/endpoints"/> 
    </bean> 
</beans> 

端点

@Endpoint 
public class ServesyWebServiceEndpoint { 

     private static final String TARGET_NAMESPACE ="http://www.servesy.com/api/v1/service"; 


     private ServesyWebService servesyservice_i; 

     @Autowired 
     public void setServesyWebService(ServesyWebService servesyservice_p) 
     { 
      this.servesyservice_i = servesyservice_p; 
     } 



     @PayloadRoot(localPart="SignupRequest", namespace=TARGET_NAMESPACE) 
     public @ResponsePayload SignupResponse response(SignupRequest signupRequest) { 

      SignupResponse signupResponse = new SignupResponse(); 
      Signup signup = servesyservice_i.signupResponse(signupRequest.getMobileNumber(), signupRequest.getPassword(), signupRequest.getCustomerName(), signupRequest.getEmailId(), signupRequest.getPromoCode(), signupRequest.getDevice()); 
      signupResponse.setSignup(signup); 
      return signupResponse; 
     } 

     @PayloadRoot(localPart="LoginRequest", namespace=TARGET_NAMESPACE) 
     public @ResponsePayload LoginResponse response(LoginRequest loginRequest) { 

      LoginResponse loginResponse = new LoginResponse(); 
      String string = servesyservice_i.signinResponse(loginRequest.getEmailID(), loginRequest.getPassword(), loginRequest.getDevice()); 
      loginResponse.setSessionId(string); 
      return loginResponse; 
     } 
    } 

和我soupui给这种类型的空白输出: enter image description here

回答

2

EndpointNotFoundException当春天-WS不能找到合适的@Endpoint能够处理传入的请求发生。

在这种情况下,传入消息具有名称空间http://www.servesy.com/api/v1/service和本地名称signupRequest(可以在日志中看到)。虽然你的@PayloadRoot映射具有相同的名称空间;它不具有相同的本地名称,因为它使用SignupRequest与大写字母S.有可能是,如果在@PayloadRoot注释中将大写字母S更改为小写字母s,它将起作用。

0

上下文级参数也需要反映在MessageDispatcherServlet级别。

<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> <br> 
 
     <init-param> <br> 
 
      <param-name>transformWsdlLocations</param-name> <br> 
 
      <param-value>true</param-value> <br> 
 
     </init-param> <br> 
 
     <init-param> <br> 
 
      <param-name>contextConfigLocation</param-name> <br> 
 
      <param-value>/WEB-INF/config/servesy-config.xml</param-value> <br> 
 
     </init-param> <br>