2012-09-23 17 views
8

Tại sao tôi có thể đặt faulString, nhưng tôi không thể đặt mã lỗi tùy chỉnh trong SOAPFault? Khi tôi ném ngoại lệ, văn bản "Mã X" không xuất hiện trong SoapFaultException. Ai đó có thể cho tôi biết tại sao? Cảm ơn.Cách đặt mã lỗi trong SOAPFault?

SOAPFault soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault(); 
soapFault.setFaultString("String Y") 
soapFault.setFaultCode("Code X"); 

throw new SOAPFaultException(soapFault); 

Trả lời

3

Từ documentation:

mã lỗi, mà cung cấp thông tin về lỗi, được định nghĩa trong SOAP 1.1 đặc điểm kỹ thuật. Phần tử này là bắt buộc trong SOAP 1.1. Vì mã lỗi được yêu cầu là một QName, nên thích hợp hơn là sử dụng biểu mẫu setFaultCode (Tên) của phương thức này.

faultCode - a String đặt mã lỗi. Nó phải là biểu mẫu "prefix:localName" nơi tiền tố đã được xác định trong tuyên bố không gian tên .

Lưu ý rằng mã lỗi thiết lập your're phải là định dạng này: prefix:localName. Bạn đang thiết lập: Code X, đó là lý do tại sao bạn không nhìn thấy nó. Sử dụng phương pháp this và tất cả đều phải OK.

3

Có thể lấy mã lỗi trong việc phản ứng xà phòng với các ví dụ sau:

String faultString = "String Y"; 
String faultCodeValue = "Code X"; 
QName faultCode = new QName("nameSpaceURI", faultCodeValue); 
SOAPFault soapFault = null; 
try { 
    soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault(faultString, faultCode); 
    throw new javax.xml.ws.soap.SOAPFaultException(soapFault); 
} catch (SOAPException e1) { 
    // 
} 

tôi nhận được lỗi xà phòng sau lại:

<?xml version="1.0" ?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope" xmlns=""> 
     <faultcode xmlns:ns0="nameSpaceURI">ns0:Code X</faultcode> 
     <faultstring>String Y</faultstring> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 
Các vấn đề liên quan