Je développe actuellement un service Web en Java en utilisant Axis 2. J'ai conçu mon service comme POJO (Plain Old Java Object) avec méthode publique de lancer des exceptions:Web Service lancer exception en utilisant Axis2 Java
public class MyService {
public Object myMethod() throws MyException {
[...]
}
}
J'ai ensuite généré le WSDL en utilisant la tâche Axis2 ant. Avec le WSDL, je génère un talon de client pour tester mon service. Le code généré contient un « MyExceptionException » et le « myMethod » dans le déclarer stub jeter ceci:
public class MyServiceStub extends org.apache.axis2.client.Stub {
[...]
public MyServiceStub.MyMethodResponse myMethod(MyServiceStub.MyMethod myMethod)
throws java.rmi.RemoteException, MyExceptionException0 {
[...]
}
[...]
}
Mais lorsque vous appelez la méthode entourée d'une prise, le « MyExceptionException » n'est jamais transmis par le serveur qui transmet un AxisFault à la place (sous-classe de RemoteException).
Je suppose que le problème est côté serveur mais ne trouve pas où. Le service est déployé en tant que fichier aar dans la webapp axis2 sur un serveur Tomcat 5.5. Le services.xml ressemble à ceci:
<?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>
Si le comportement est normal alors je vais laisser tomber l'utilisation des exceptions (ce qui est essentiel à mon projet) mais je suis circonspect pourquoi Java2WSDL générer la coutume < wsdl: défaut > dans l'entrée de l'opération & la déclaration de sortie et WSDL2Java génèrent une classe Exception (et déclarent la lancer dans la méthode stub) si cela n'est pas utilisable ...
Dans le Serverside code généré, il Générez un AxisFault et ajouter au contexte SOAP une org.apache.axis2.Constants.FAULT_NAME pour mapper l'erreur personnalisée dans le WSDL ... – Vinze
Dans le talon du client, le problème semble être que org.apache.axiom.om.OMElement faultElt = f.getDetail(); renvoie null ...le stub n'est donc pas capable de mapper l'erreur d'axe à une exception java personnalisée (qui est générée à partir de WSDL) ... – Vinze
ressemble à un bug pour moi. Si une méthode déclare explicitement ses exceptions, ces exceptions doivent être sérialisées et transmises en conséquence. Même le générateur de client de service Web d'axe Eclipse génère les classes d'exception dans le client. OMI –