Я хочу, чтобы подклассы MyCustomException
, но для суперкласса, который должен быть передан через веб-службу; однако вместо этого подкласс переносится. Я попытался добавить аннотацию WebFault
к классам без эффекта. Я привел пример того, что в настоящее время происходит, и пример того, что я хочу сделать вместо этого.Ошибка JAX-WS: выбросить суперкласс исключение
Исключения.
public class MyCustomException extends Exception {
String text;
public static class CustomInner extends MyCustomException {
public CustomInner1() {
super("inner");
}
}
public MyCustomException(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
Реализация веб-сервиса. NB: Я не хочу менять то, что здесь бросают.
@Stateless(name = "MyService", mappedName = "MyService")
@LocalBean
@WebService(targetNamespace = "http://my.org/ns/")
public class MyService {
@WebMethod
public String throwCustomInnerException() throws MyCustomException {
throw new MyCustomException.CustomInner();
}
@WebMethod
public String throwCustomException() throws MyCustomException {
throw new MyCustomException("text");
}
}
XML, для throwCustomException()
вызова с помощью веб-службы.
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>pack.MyCustomException</faultstring>
<detail>
<ns2:MyCustomException xmlns:ns2="http://my.org/ns/">
<text>text</text>
</ns2:MyCustomException>
</detail>
</S:Fault>
</S:Body>
</S:Envelope>
XML, для throwCustomInnerException()
вызова с помощью веб-службы.
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>pack.CustomInner</faultstring>
</S:Fault>
</S:Body>
</S:Envelope>
То, что я хочу, чтобы случиться следующее, когда throwCustomInnerException()
вызывается с помощью веб-сервиса:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>pack.MyCustomException</faultstring>
<detail>
<ns2:MyCustomException xmlns:ns2="http://my.org/ns/">
<text>inner1</text>
</ns2:MyCustomException>
</detail>
</S:Fault>
</S:Body>
</S:Envelope>
Я действительно не хочу менять то, что бросается (так как это упрощенная версия фактического кода). –