Hello,
The context :
I'm using Axis2 1.0
I have a service defined in wsdl (see the attachement : upload.wsdl)
I call the operation initUpload.
When a javaException occurs in the method, I send a AxisFault build with
this method :
public static AxisFault newErreurJava(Exception e) {
AxisFault ex = new AxisFault(e.toString(), new
QName(WsConstantes.NS_UPLOAD_SERVICE, "erreurJava"));
// Extraction de la pile d'erreur
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
pw.close();
// Création du détail
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace nsUpl =
factory.createOMNamespace(WsConstantes.NS_UPLOAD_TYPES, "upl");
OMElement detail = factory.createOMElement("javaException", nsUpl);
factory.createOMElement("class", nsUpl,
detail).setText(e.getClass().getName());
factory.createOMElement("stack", nsUpl,
detail).setText(sw.toString());
ex.setDetail(detail);
return ex;
}
I naively thought that I would get a correct SOAP:Fault answer with
this. Instead, I get what is in response.xml
I have seen in org.apache.axis2.receivers.RawXMLINOutMessageReceiver
public void invokeBusinessLogic(MessageContext msgContext,
MessageContext newmsgContext)
throws AxisFault {
try {
/* .... */
OMElement result;
try {
result = (OMElement) method.invoke(obj, args);
} catch (Exception e) {
throw new AxisFault(e.getMessage());
}
/* ... */
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
}
And in AxisFault :
public static AxisFault makeFault(Exception e) {
if (e instanceof InvocationTargetException) {
Throwable t = ((InvocationTargetException)
e).getTargetException();
if (t instanceof Exception) {
e = (Exception) t;
}
}
if (e instanceof AxisFault) {
return (AxisFault) e;
}
return new AxisFault(e);
}
It seams that the catch around the refective invokation kills the
InvocationTargetException that would be dealed by AxisFault.makeFault()
otherwise.
But because Axis and webservices in general are new for me, I'm not sure
about it.
What can I do to get a SOAP:Fault that is conform to my wsdl ?
Thank you !
--
Jérôme Mainaud Klee Group
[EMAIL PROTECTED] <http://www.kleegroup.com/>
+ 33 146 295 825 Tel: + 33 146 292 525
Fax: + 33 146 292 529
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:ns="urn:klee:arcade:upload:service"
xmlns:types="urn:klee:arcade:upload:types"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="urn:klee:arcade:upload:service">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:klee:arcade:upload:types"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xs:complexType name="typeTypeDeFichier">
<xs:sequence>
<xs:element type="xs:string"
name="extension" />
<xs:element type="xs:boolean"
name="autorisé" />
<xs:element type="xs:boolean"
name="convertible" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="vide"></xs:complexType>
<xs:element name="uploadSession" type="xs:string" />
<xs:element name="dossierId" type="xs:long" />
<xs:element name="initUpload">
<xs:complexType>
<xs:sequence>
<xs:element ref="dossierId" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="initUploadResponse">
<xs:complexType>
<xs:sequence>
<xs:element ref="uploadSession"
/>
<xs:element name="transportUri"
type="xs:string" />
<xs:element
name="algorithmeEmpreinte" type="xs:string"/>
<xs:element name="infoDossier">
<xs:complexType>
<xs:sequence>
<xs:element name="lotId" type="xs:long" />
<xs:element name="lotIntitule" type="xs:string" />
<xs:element name="dossierId" type="xs:long" />
<xs:element name="dosNumeroComplet" type="xs:string" />
<xs:element name="dosIntitule" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="javaException">
<xs:complexType>
<xs:sequence>
<xs:element name="class"
type="xs:string" />
<xs:element name="stack"
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="terminerUpload">
<xs:complexType>
<xs:sequence>
<xs:element ref="uploadSession"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="listerLesTypesDeFichier" type="vide"
/>
<xs:element name="listeDesFormatsDeFichier">
<xs:complexType>
<xs:sequence>
<xs:element
name="typeDeFichier" minOccurs="0" type="typeTypeFichier" maxOccurs="unbounded"
/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ajouterFichier">
<xs:complexType>
<xs:sequence>
<xs:element ref="uploadSession"
/>
<xs:element ref="dossierId" />
<xs:element name="nom"
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ajouterFichierResponse">
<xs:complexType>
<xs:sequence>
<xs:element ref="uploadSession"
/>
<xs:element ref="dossierId" />
<xs:element name="nom"
type="xs:string" />
<xs:element name="résultat"
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="initUploadMessage">
<wsdl:part element="types:initUpload" name="part1" />
</wsdl:message>
<wsdl:message name="initUploadResponseMessage">
<wsdl:part element="types:initUploadResponse" name="part1" />
</wsdl:message>
<wsdl:message name="javaExceptionMessage">
<wsdl:part element="types:javaException"
name="part1"></wsdl:part>
</wsdl:message>
<wsdl:message name="listerLesTypesDeFichierrMessage">
<wsdl:part element="types:listerLesTypesDeFichier" name="part1"
/>
</wsdl:message>
<wsdl:message name="listerLesTypesDeFichierResponseMessage">
<wsdl:part element="types:listeDesFormatsDeFichier"
name="part1" />
</wsdl:message>
<wsdl:message name="terminerUploadMessage">
<wsdl:part element="types:terminerUpload"
name="part1"></wsdl:part>
</wsdl:message>
<wsdl:message name="ajouterFichierMessage">
<wsdl:part element="types:ajouterFichier"
name="part1"></wsdl:part>
</wsdl:message>
<wsdl:message name="ajouterFichierResponseMessage">
<wsdl:part element="types:ajouterFichierResponse"
name="part1"></wsdl:part>
</wsdl:message>
<wsdl:portType name="UploadServicePortType">
<wsdl:operation name="initUpload">
<wsdl:input message="ns:initUploadMessage" />
<wsdl:output message="ns:initUploadResponseMessage" />
<wsdl:fault name="fault"
message="ns:javaExceptionMessage"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="listerLesTypesDeFichier">
<wsdl:input message="ns:listerLesTypesDeFichierMessage"
/>
<wsdl:output
message="ns:listerLesTypesDeFichierResponseMessage" />
</wsdl:operation>
<wsdl:operation name="ajouterFichier">
<wsdl:input message="ns:ajouterFichierMessage" />
<wsdl:output message="ns:ajouterFichierResponseMessage"
/>
</wsdl:operation>
<wsdl:operation name="terminerUpload">
<wsdl:input message="ns:terminerUploadMessage" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding type="ns:UploadServicePortType"
name="UploadServiceSOAP11Binding">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="initUpload">
<soap:operation style="document"
soapAction="urn:initUpload" />
<wsdl:input>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
<wsdl:fault name="fault">
<soap:fault name="fault"
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="listerLesTypesDeFichier">
<soap:operation style="document"
soapAction="urn:listerLesTypesDeFichier" />
<wsdl:input>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ajouterFichier">
<soap:operation style="document"
soapAction="urn:ajouterFichier" />
<wsdl:input>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="terminerUpload">
<soap:operation style="document"
soapAction="urn:terminerUpload" />
<wsdl:input>
<soap:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding type="ns:UploadServicePortType"
name="UploadServiceSOAP12Binding">
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="initUpload">
<soap12:operation style="document"
soapAction="urn:initUpload" />
<wsdl:input>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
<wsdl:fault name="fault">
<soap12:fault name="fault"
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="listerLesTypesDeFichier">
<soap12:operation style="document"
soapAction="urn:listerLesTypesDeFichier" />
<wsdl:input>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ajouterFichier">
<soap12:operation style="document"
soapAction="urn:ajouterFichier" />
<wsdl:input>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="terminerUpload">
<soap12:operation style="document"
soapAction="urn:terminerUpload" />
<wsdl:input>
<soap12:body
namespace="urn:klee:arcade:upload:service" use="literal" />
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="upload">
<wsdl:port binding="ns:UploadServiceSOAP11Binding"
name="UploadServiceSOAP11port">
<soap:address
location="http://localhost:8080/arcade/services/UploadService" />
</wsdl:port>
<wsdl:port binding="ns:UploadServiceSOAP12Binding"
name="UploadServiceSOAP12port">
<soap12:address
location="http://localhost:8080/arcade/services/UploadService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions><?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header /><soapenv:Body><soapenv:Fault><faultcode>soapenv:Client</faultcode><faultstring>unknown</faultstring><detail><Exception>
org.apache.axis2.AxisFault
at org.apache.axis2.receivers.RawXMLINOutMessageReceiver.invokeBusinessLogic(RawXMLINOutMessageReceiver.java:102)
at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive(AbstractInOutSyncMessageReceiver.java:37)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:454)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:284)
at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:136)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
</Exception></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]