Frage

Ich habe einen WCF-client die Kommunikation mit einem unbekannten server-Implementierung, die ich keine Kontrolle habe.Dieser client funktioniert es einfach nicht mag, was zu sein scheint, falsch gebildet SOAP-Fehler-Nachrichten.Die Nachrichten, die ich erhalten so Aussehen:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   
    <soap:Header>...</soap:Header>  
    <soap:Body>  
        <soap:Fault>  
            <soap:faultcode>soap:Client</soap:faultcode>  
            <soap:faultstring>...</soap:faultstring>  
            <soap:detail>...</soap:detail>  
        </soap:Fault>  
    </soap:Body>  
</soap:Envelope>  

Ich glaube, nach dem soap-schema die untergeordneten Elemente sollten nicht qualifiziert sein und ned so Aussehen:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   
    <soap:Header>...</soap:Header>  
    <soap:Body>  
        <soap:Fault>  
            <faultcode>soap:Client</faultcode>  
            <faultstring>...</faultstring>  
            <detail>...</detail>  
        </soap:Fault>  
    </soap:Body> 
</soap:Envelope>

Gibt es etwas, das ich konfigurieren können, oder überschreiben, sodass ich verbrauchen kann Nachrichten, die ankommen in der letzteren Form, so dass ich verbrauchen kann die Fehlermeldungen anstelle von xml-Ausnahmen?

War es hilfreich?

Lösung

Ich bin nicht daran erinnern, wie ich auf Nachricht Inspektoren stolperte gefunden, aber dass es, wie ich mein Problem gelöst.

Diese und

Andere Tipps

Beachten Sie, dass die System.Web.Services.Protocols.SoapHttpClientProtocol Klasse scheint deutlich tolerante mißgebildeter Fehlerreaktionen als WCF.

Dies wird manchmal als ASMX Dienstleistungen Protokoll bezeichnet. Das kann eine Option sein, aber auch zu berücksichtigen.

Howard Hoffman

} catch (SoapFaultClientException e) {
    log.error(e);
    SoapFaultDetail soapFaultDetail = e.getSoapFault().getFaultDetail();
    SoapFaultDetailElement detailElementChild = (SoapFaultDetailElement) soapFaultDetail.getDetailEntries().next();
    Source detailSource = detailElementChild.getSource();

    try {
        Object detail = (JAXBElement<SearchResponse>) getWebServiceTemplate().getUnmarshaller().unmarshal(detailSource);
//                throw new SoapFaultWithDetailException(detail);

    } catch (IOException e1) {
        throw new IllegalArgumentException("cannot unmarshal SOAP fault detail object: " + soapFaultDetail.getSource());
    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top