Я создаю веб-сервис на Java из существующего WSDL. Инструмент wsimport
сгенерировал все классы Java, связанные с элементами в схеме сервиса. В частности, объявление ошибки дает следующий класс:
@javax.xml.ws.WebFault(name = "Fault", targetNamespace = "http://my.company.com/service-1")
public class ServiceFault extends java.lang.Exception {
// constructors and faulInfo getter
}
Теперь я хотел бы расширить этот класс, чтобы добавить больше поведения:
public class MyServiceFault extends ServiceFault {
// some behavior
}
Когда я сейчас выбрасываю экземпляры MyServiceFault
из своего приложения, я ожидаю, что эти ошибки будут правильно сериализованы в XML в ответе SOAP. Но вместо этого я получаю что-то вроде этого:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>Some fault string.</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
То есть Я полностью пропускаю элемент faultInfo . Мой стек SOAP обрабатывает MyServiceFault
как любое другое исключение, а не как исключение, представляющее сбой в службе.
Сначала я подумал, что аннотация @WebFault
не унаследована MyServiceFault
, но я попытался снова после явного добавления этой аннотации, но безуспешно.
Есть идеи, что я здесь не так делаю?