Я на самом деле разрабатываю веб-сервис на Java с использованием Axis 2.
Я разработал свой сервис как POJO (простой старый Java-объект) с открытым методом, генерирующим исключения:
public class MyService {
public Object myMethod() throws MyException {
[...]
}
}
Затем я сгенерировал WSDL с помощью Ant-задачи Axis2. С помощью WSDL я генерирую клиентскую заглушку для тестирования моего сервиса. Сгенерированный код содержит «MyExceptionException» и «myMethod» в заглушке объявить, чтобы бросить это:
public class MyServiceStub extends org.apache.axis2.client.Stub {
[...]
public MyServiceStub.MyMethodResponse myMethod(MyServiceStub.MyMethod myMethod)
throws java.rmi.RemoteException, MyExceptionException0 {
[...]
}
[...]
}
Но при вызове метода, окруженного перехватом, MyExceptionException никогда не передается сервером, который вместо этого передает AxisFault (подкласс RemoteException).
Я предполагаю, что проблема на стороне сервера, но не могу найти где. Служба развернута в виде файла aar в веб-приложении axis2 на сервере tomcat 5.5. Services.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<service name="MyService" scope="application">
<description></description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">MyService</parameter>
<parameter name="ServiceTCCL">composite</parameter>
</service>
Если поведение нормальное, тогда я откажусь от использования Исключений (что не является жизненно важным для моего проекта), но я осмотрительно, почему Java2WSDL генерирует пользовательский в объявлении ввода-вывода операции, а WSDL2Java генерирует Исключительный класс (и объявите, чтобы бросить его в метод заглушки), если это не может быть использовано ...