Sprawdzenie, czy nie zmieniło się zachowanie w kodach i łańcuchach błędów SOAP usług WWW

Ta reguła oznacza flagą wywołania metod, które pobierają łańcuchy i błędy SOAP. Domyślne kody błędów i łańcuchy zwracane przez środowiska wykonawcze usług WWW zostały zmienione w produkcie WebSphere Application Server 8.

W szczególności oznaczane są następujące metody:

Zmiany w domyślnych kodach błędów i łańcuchach błędów zostały wprowadzone w celu naprawienia potencjalnego ryzyka związanego z zabezpieczeniami usług WWW za pomocą szyfrowania XML. W ramach poprawki szczegółowe informacje są usuwane z każdego błędu SOAP generowanego przez środowisko wykonawcze usług WWW. Domyślnie w wersji 8 środowiska wykonawcze usług WWW ujednolicają wszystkie błędy generowane przez środowisko wykonawcze do jednego typu błędu zawierającego kod błędu soapenv:Server i łańcuch błędu Internal Error.

Jeśli aplikacja oczekuje szczegółowych informacji z kodów lub łańcuchów błędów środowiska wykonawczego, konieczne może być zmodyfikowanie aplikacji. Można również użyć właściwości niestandardowej wirtualnej maszyny języka Java webservices.unify.faults w celu zmiany domyślnego zachowania. Aby przywrócić zachowanie z poprzedniej wersji, należy ustawić właściwość webservices.unify.faults na wartość false.

W wersjach wcześniejszych niż WebSphere Application Server 8 domyślne zachowanie polega na zwrocie szczegółowych informacji w kodzie lub łańcuchu błędu. Ten problem został rozwiązany również w strumieniach usług, w tym w wersji 6.0.2, 6.1 i 7.0, ale zachowanie domyślne w tych wersjach pozostaje niezmienione. W przypadku wydań serwisowych właściwość webservices.unify.faults ma wartość domyślną false. Należy zmienić tę wartość na true, aby w tych wydaniach uzyskać takie samo zachowanie jak w wersji 8.

Przykład dla JAX-WS:
import javax.xml.ws.soap.SOAPFaultException;
import javax.xml.ws.soap.SOAPFault;

try {
// kod powodujący błąd
...
} catch (SOAPFaultException e) {
SOAPFault soapFault = e.getFault();
String faultCode = soapFault.getFaultCode();
String faultString = soapFault.getFaultString();
...
}


Przykład dla JAX-RPC:
import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.namespace.QName;

try {
// kod powodujący błąd
...
} catch (SOAPFaultException e) {
QName faultCode = e.getFaultCode();
String faultString = e.getFaultString();
...
}

W obu tych przykładach wywołania metod getFaultCode() i getFaultString() zostaną oznaczone flagą.

Dodatkowe informacje na ten temat: