Tôi mới làm quen với Spring-WS và từ từ thu hút đầu tôi. Ngay bây giờ, tôi đang viết một máy khách đơn giản để giao tiếp với một WS hiện có. Tôi đang sử dụng WebServiceTemplate và phương thức marshalSendAndReceive. Mọi thứ đều hoạt động tốt.Làm thế nào để unmarshal một lỗi SOAP trong một FaultMessageResolver?
Tuy nhiên, khi lỗi SOAP xảy ra, WST sẽ đưa ra một SoapFaultClientException. Tôi nhận thấy rằng tôi có thể tạo FaultMessageResolver của riêng mình để kiểm tra những gì có trong lỗi SOAP. Tuy nhiên, khi tôi cố gắng unmarshal các WebServiceMessage trong FaultMessageResolver của tôi, tôi nhận được thông báo lỗi sau:
JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Fault"). Expected elements are ....
Rõ ràng, unmarshaller của tôi không được cấu hình đúng cách. Tôi có phải tạo ra mô hình lỗi JAXB bản thân mình bằng cách sử dụng xjc để sau đó có thể unmarshal lỗi? Tôi hơi ngạc nhiên rằng điều này không tồn tại.
Có cách nào tốt hơn để thêm thông tin lỗi tùy chỉnh của tôi từ bên trong xà phòng của tôi: phản hồi lỗi không? Lỗi của tôi trông giống như sau và tôi đang cố gắng trích xuất/truy cập mục serviceErrors.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Blaze Data Error</faultstring>
<detail>
<ns14:serviceErrors xmlns="http://www.nb.com/ClientServices/LendingSimulation/CalculateProfitabilityRequest" xmlns:ns13="http://www.nb.com/fw/errorMgmt" xmlns:ns14="http://www.nb.com/ClientServices/LendingSimulation/V1" >
<ns13:faultstring>ServiceExecutionError</ns13:faultstring>
<ns13:serviceError>
<ns13:errorCode>C10F1013</ns13:errorCode>
<ns13:errorType>B</ns13:errorType>
<ns13:errorMessage>Unable to retreive additional data</ns13:errorMessage>
<ns13:fieldName>Message error received from PHClient : [An unexpected error code was received : system=PH context=[empty]]</ns13:fieldName>
<ns13:systemId>Calculator</ns13:systemId>
<ns13:time>2012-06-19 14:45:10.151-0400</ns13:time>
</ns13:serviceError>
</ns14:serviceErrors>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Cảm ơn!
Eric
Cảm ơn. Đó là khá nhiều những gì tôi đã làm. Nhưng điều đó chỉ nhận được một thông tin lỗi tại một thời điểm, mà tôi nghĩ là khá lạ. Tôi đã có thể mong đợi một số hệ thống cho phép tôi unmarhsal tất cả các lỗi vào một danh sách hoặc mảng lỗi. –