2016-05-13 8 views
0

Wir versuchen hier einen Webservice zu erstellen. Wir möchten, dass der Dienst unter /axis2/services/SmsNotificationService​ verfügbar ist. Die Operation, die aufgerufen wird, ist notifySmsDeliveryReceipt. Das Folgende ist der Endpunkt von Spring.Endpoint in Spring-WS registrieren

Der Client wird den Dienst mit diesem XML aufrufen.

<soapenv:Envelope xmlns:soapenv=‘http://schemas.xmlsoap.org/soap/envelope/’ xmlns:v3=‘http://www.csapi.org/schema/parlayx/common/v3_1’ xmlns:loc=‘http://www.csapi.org/schema/parlayx/sms/notification/v3_1/local’> 
    <soapenv:Header> 
    <v3:NotifySOAPHeader> 
     <spId>600002</spId> 
    </v3:NotifySOAPHeader> 
    </soapenv:Header> 
    <soapenv:Body> 
    <loc:notifySmsDeliveryReceipt> 
     <loc:correlator>123</loc:correlator> 
     <loc:deliveryStatus> 
     <address>tel:+86123</address> 
     <deliveryStatus>DeliveredToTerminal</deliveryStatus> 
     </loc:deliveryStatus> 
    </loc:notifySmsDeliveryReceipt> 
    </soapenv:Body> 
</soapenv:Envelope> 

Der Service benötigt diese XML zurück:

<soapenv:Envelope xmlns:soapenv=‘http://schemas.xmlsoap.org/soap/envelope/’ xmlns:loc=‘http://www.csapi.org/schema/parlayx/sms/notification/v3_1/local’> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <loc:notifySmsDeliveryReceiptResponse/> 
    </soapenv:Body> 
</soapenv:Envelope> 

Tomcat-Zugriffsprotokoll registriert einen Serviceanruf aber der entfernten Anrufer erhalten eine Fehlermeldung:

`xxx.xx.xxx.x - - [13/May/2016:13:43:43 +0630] "POST /axis2/services/SmsNotificationService​ HTTP/1.1" 404 -` 

Catalina Protokoll zeigt die folgende:

13-May-2016 13:42:32.459 INFO [http-nio-8088-exec-6] org.springframework.ws.soap.addressing.server.AbstractAddressingEndpointMapping.afterPropertiesSet Supporting [WS-Addressing August 2004, WS-Addressing 1.0] 
13-May-2016 13:42:32.487 INFO [http-nio-8088-exec-6] org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons Pre-instantiating singletons in org.s[email protected]2e8571ab: defining beans [org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping#0,org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping#0,org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping#0,org.springframework.ws.server.endpoint.adapter.method.dom.DomPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.SourcePayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.dom.Dom4jPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.dom.XomPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter#0,org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver#0,org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver#0]; root of factory hierarchy 
13-May-2016 13:42:32.764 INFO [http-nio-8088-exec-6] org.springframework.ws.soap.saaj.SaajSoapMessageFactory.afterPropertiesSet Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 
13-May-2016 13:42:32.784 INFO [http-nio-8088-exec-6] org.springframework.web.servlet.FrameworkServlet.initServletBean FrameworkServlet 'spring-ws': initialization completed in 2448 ms 
13-May-2016 13:43:43.774 WARNING [http-nio-8088-exec-8] org.springframework.ws.server.MessageDispatcher.dispatch No endpoint mapping found for [SaajSoapMessage {http://www.csapi.org/schema/parlayx/sms/notification/v3_1/local}notifySmsDeliveryReceipt] 

Das Problem liegt möglicherweise darin, dass der Endpunkt nicht von Spring-WS registriert wird.

Hat jemand eine Idee, wie man einen Endpunkt registriert und eine Operation mit Spring-WS deklariert?

Antwort

3

Wenn Sie Feder WS verwenden, dann sollten Sie

Servletzuordnung in web.xml Datei

<servlet> 
    <servlet-name>webservices</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>classpath:springws-config.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
     <servlet-name>webservices</servlet-name> 
     <url-pattern>/axis2/services/*</url-pattern> 
</servlet-mapping> 

MessageDispatcherServlet scannt alle Bohnen von Wsdl11Definition in Classpath definieren und veröffentlichen. Dann benötigen Sie eine Feder Konfigurationsdatei zu erstellen:

<?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:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:sws="http://www.springframework.org/schema/web-services" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc.xsd 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.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.xsd"> 

    <context:component-scan base-package="some.package.SmsNotificationService"/> 
    <sws:annotation-driven /> 
    <!-- you can use static-wsdl OR dynamic-wsdl here --> 
</beans> 
+0

Ihre Antwort scheint

springws-config.xml richtig. Der Dienst wirft jetzt 500 Fehler. –

+0

poste deinen Fehler –