2013-03-18 7 views
9

Otrzymuję błąd podczas wywoływania usługi spring-cxf-web z aplikacji wsadowej wiosny. Ten błąd występuje tylko wtedy, gdy jest wywoływany z partii. Podczas wywoływania z normalnego mydlanego interfejsu użytkownika działa dobrze.A raz jego wywołanie z partii niektóre rekordy są przetwarzane.Błąd się dzieje dla kilku rekordów.Sprawdzono wersję SOAP partii i usługi internetowej i tym samym.Komunikat SOAP 1.2 jest niepoprawny, gdy jest wysyłany do punktu końcowego SOAP 1.1 tylko

org.apache.cxf.binding.soap.SoapFault: A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint. 
       at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:144) 
       at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:60) 
       at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
       at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:799) 
       at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1627) 
       at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1494) 
       at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1402) 
       at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
       at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:649) 
       at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
       at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
       at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533) 
       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463) 
       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366) 
       at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319) 
       at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88) 
       at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134) 

Konfiguracja Batch

<jaxws:client id="mainClient" 
       serviceClass="com.batch.service.MainSoap" 
       address="${url}" /> 

Każda pomoc lub sposobem identyfikacji przyczyny byłyby doceniane

+0

Czy możesz udostępnić określone części swojej konfiguracji? –

+0

@ SerkanArıkuşu edytowane pytanie z konfiguracją wsadową. – Sajith

+0

Nie pokazałeś nam konfiguracji/kodu, który podpina obiekt klienta mainClient Jax WS do Spring Batch. –

Odpowiedz

2

Wystarczy dodać Mydło wiążące.

<jaxws:endpoint id="mainClient" serviceClass="com.batch.service.MainSoap" 
    address="${url}"> 

    <jaxws:binding> 
    <soap:soapBinding version="1.2" mtomEnabled="true" /> 
    </jaxws:binding> 
</jaxws:endpoint> 
+0

Określanie powiązania nie pomogło w moim przypadku. – Artem

+0

Jak zrobić mydło wiążące 1.2 bez sprężyny? Spring robi to zgodnie z '' jakoś i muszę zrobić to samo bez sprężyny (tylko cxf) – 4ntoine

1

dodać adnotację na interfejsie usług, próbowałem jej pracę dla mnie

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 

Klasa DeliveryService jest generowany:

@WebService(targetNamespace = "http://...", name = "ServiceInterface") 
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 

public interface ServiceInterface { 
@WebResult(name = "response", targetNamespace = "http:///", partName = "response") 
0

Właśnie spotkać ten sam problem przy użyciu CXF struktura. Przyczyną tego była zła konfiguracja punktu końcowego: lokalizacja wsdlLocation nie wskazywała na plik wsdl ... Istnieje wiele sposobów definiowania położenia pliku wsdl: można go podać podczas inicjowania punktu końcowego (konstruktor punktu końcowego podejmuje opcjonalny parametr wsdlLocation jako parametr) lub przez podanie dla argumentu wsdl2java argumentu "wsdlLocation" (jeśli generujesz klasy z pliku wsdls).

Wskazanie niewłaściwej lokalizacji wsdlLocation może być przyczyną tego wyjątku ...

Powiązane problemy