2016-06-09 5 views
1

Ich habe einen Mock-SOAP-Dienst in SoapUI nach dem Handbuch here eingerichtet. Wenn die CurrencyConvertorSoap12 Antrag 1 innerhalb SoapUI Ausführung, erhalte ich die passende Antwort:Mock SOAP-Dienst funktioniert in SoapUI, aber nicht mit Spring-Integration

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET/"> 
    <soap:Header/> 
    <soap:Body> 
     <web:ConversionRateResponse> 
     <web:ConversionRateResult>2.34</web:ConversionRateResult> 
     </web:ConversionRateResponse> 
    </soap:Body> 
</soap:Envelope> 

Jetzt möchte ich es testen Sie die Frühlings-Integration Web-Service-Outbound-Gateway.

ich einen Web-Service-Test (der String requestXML unten ist die gleiche XML-Anforderung in SoapUI) einzurichten:

@Test 
public void webServiceTest() { 

    AbstractApplicationContext context = new ClassPathXmlApplicationContext("Context.xml"); 

    DestinationResolver<MessageChannel> channelResolver = new BeanFactoryChannelResolver(context); 

    String requestXml = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:web=\"http://www.webserviceX.NET/\">" 
         + "<soap:Header/>" 
         + "<soap:Body>" 
         + "<web:ConversionRate>" 
         + "<web:FromCurrency>?</web:FromCurrency>" 
         + "<web:ToCurrency>?</web:ToCurrency>" 
         + "</web:ConversionRate>" 
         + "</soap:Body>" 
         + "</soap:Envelope>"; 

    Message<String> message = MessageBuilder.withPayload(requestXml).build(); 
    MessageChannel channel = channelResolver.resolveDestination("wsInChannel"); 

    channel.send(message); 
} 

Context.xml:

<?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:int="http://www.springframework.org/schema/integration" 
    xmlns:int-stream="http://www.springframework.org/schema/integration/stream" 
    xmlns:int-ws="http://www.springframework.org/schema/integration/ws" 
    xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/integration 
      http://www.springframework.org/schema/integration/spring-integration.xsd 
      http://www.springframework.org/schema/integration/stream 
      http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd 
      http://www.springframework.org/schema/integration/ws 
      http://www.springframework.org/schema/integration/ws/spring-integration-ws.xsd"> 

    <int:channel id="wsInChannel"/> 

    <int:chain input-channel="wsInChannel" output-channel="stdoutChannel"> 
     <int-ws:header-enricher> 
      <int-ws:soap-action value="http://www.webserviceX.NET/ConversionRate"/> 
     </int-ws:header-enricher> 
     <int-ws:outbound-gateway uri="http://localhost:8088/mockCurrencyConvertorSoap12"/> 
    </int:chain> 

    <int:channel id="stdoutChannel"/> 
    <int-stream:stdout-channel-adapter 
     id="consumer" channel="stdoutChannel" append-newline="true" /> 

</beans> 

Wenn ich den Test ausführen, bekomme ich diese Fehler in SoapUI:

Thu Jun 09 11:50:21 EDT 2016:ERROR:An error occurred [Missing operation for soapAction [http://www.webserviceX.NET/ConversionRate] and body element [{http://www.w3.org/2003/05/soap-envelope}Envelope] with SOAP Version [SOAP 1.1]], see error log for details 

Was mache ich falsch?

+0

IMHO nicht XML aus Dateien zu lesen ist eine falsche Sache, du bist tun – ThomasRS

+0

@ThomasRS Dies war nur ein Beweis für das Konzept. Normalerweise würde ich das XML nicht lesen. – badjr

+0

Dann zeigen Sie uns Ihr JAXB-Dienstprogramm ;-) Ich schlage vor, dass Sie auch mit CXF auswerten und einen Webservice-Client generieren; Sie erhalten auch den Server-Endpunkt-Schein. Ich habe ein Beispiel [hier] (https://github.com/skjolber/mockito-soap-cxf) aufgestellt, mit dem Sie SoapUI zumindest für Unit-Tests verwerfen können. – ThomasRS

Antwort

1

and body element [{ http://www.w3.org/2003/05/soap-envelope }Envelope]

Aber Sie senden die gesamte SOAP Envelope, nicht nur Body wie es verlangt.

Also, Ihre requestXml müssen wie:

"<web:ConversionRate xmlns:web=\"http://www.webserviceX.NET/\">" 
+ "<web:FromCurrency>?</web:FromCurrency>" 
+ "<web:ToCurrency>?</web:ToCurrency>" 
+ "</web:ConversionRate>" 

Und vergessen Sie nicht ? mit einer entsprechenden Währung zu ersetzen :-)

+0

Wenn ich diese Änderung vorgenommen habe, bekomme ich diesen Fehler: '[Schwerwiegender Fehler]: 1: 21: Das Präfix" Web "für Element" Web: ConversionRate "ist nicht gebunden. FEHLER: 'Das Präfix "web" für Element "web: ConversionRate" ist nicht gebunden.' ' – badjr

+0

Ich habe gerade 'xmlns: web' zu meiner Antwort hinzugefügt. Siehe aktualisierten XML. –

+0

Nun wird dieser Fehler angezeigt: 'Nachricht kann nicht erstellt werden: falscher Inhaltstyp für die SOAP-Version. Habe Anwendung/soap + xml; charset = UTF-8, aber erwarte text/xml' – badjr

Verwandte Themen