Hallo,
thanks for the answer.
I am pretty sure that the fault is properly declared in the operation. For
me it is important to know how ode recognize whether the soap fault message
belongs to a fault declared in the wsdl operation element or not which would
lead to a failure because its an unknown fault.
How ode implements this mapping from the SOAP message to the fault declared
in the WSDL description?
In the operation-element I declared „ZipCodeFault“ but the
faultstring-element of the returning soap messages contains
„BusinessFaultException“. The payload in the details-section of the soap
message is correct.
My WSDL description:
<types>
<xsd:schema
targetNamespace="http://services.sopware.org/ZipCodeFromAddress">
<xsd:element name="getZipCodeFromAddressRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="hno" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getZipCodeFromAddressResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ZipCode" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ZipCode_fault">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ZipCodeFaultString" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<wsdl:message name="getZipCodeFromAddressRequest">
<wsdl:part element="tns:getZipCodeFromAddressRequest"
name="parameters"/>
</wsdl:message>
<wsdl:message name="getZipCodeFromAddressResponse">
<wsdl:part element="tns:getZipCodeFromAddressResponse"
name="parameters"/>
</wsdl:message>
<wsdl:message name="ZipCodeFromAddressFault">
<wsdl:part element="tns:ZipCode_fault" name="parameters"/>
</wsdl:message>
<portType name="ZipCodeFromAddress" sdx:status="design">
<wsdl:operation name="getZipCodeFromAddress">
<wsdl:input message="tns0:getZipCodeFromAddressRequest"/>
<wsdl:output message="tns0:getZipCodeFromAddressResponse"/>
<wsdl:fault message="tns0: ZipCodeFromAddressFault"
name="ZipCodeFault"/>
</wsdl:operation>
</portType>
Matthieu Riou-5 wrote:
>
> On Mon, Sep 15, 2008 at 5:31 AM, maxxo <[EMAIL PROTECTED]> wrote:
>
>>
>> Hallo,
>>
>> I have a question concerning how ode processes soap faults thrown within
>> the
>> service provider. Indeed there are a lot of threads in list but I found
>> no
>> proper answer for my problem.
>> I created a BPEL process where I invoke a service. When the service
>> couldn't
>> process the request it sends a fault message defined in the WSDL
>> description
>> of the service. The problem is that ode don't throw the appropriate fault
>> thus I cannot catch it within a fault handler. I read the section
>> "Activity
>> Failure and Recovery" from the ode user guide. When I set the attribute
>> faultOnFailure to true the invoke-element throws an activityFailure. I
>> don't
>> know whether I completely understood the distinction between faults and
>> failure, but I thought that ode will throw faults defined in the WSDL
>> description and only throw activityFailure when the service does not
>> respond
>> or respond with a messages not being defined in the WSDL description.
>>
>> Is this assumption true?
>
>
> You're correct, ODE won't enter activity recovery for a WSDL fault. So you
> have to check your WSDL and make sure the fault thrown is properly
> declared
> in the operation.
>
> Matthieu
>
>
>>
>> If true, does ode take the fault name from the faultstring-element from
>> the
>> soap-fault messages?
>>
>> I ask this because I use the soa framework Sopera 3.1 to build the
>> services
>> and I am afraid that it doesn't implement correctly the soap standard but
>> I
>> am not really sure.
>>
>> Thank you for your answers.
>>
>> Fault message definition:
>>
>> <wsdl:message name="ZipCodeFromAddressFault">
>> <wsdl:part element="tns:ZipCode_fault" name="parameters"/>
>> </wsdl:message>
>>
>> SOAP response message:
>>
>> <?xml version='1.0' encoding='UTF-8'?>
>> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
>> <env:Body>
>> <env:Fault>
>> <faultcode>server</faultcode>
>> <faultstring>BusinessFaultException</faultstring>
>> <detail>
>> <ns2:ZipCode_fault
>> xmlns:ns2="http://services.sopware.org/ZipCodeFromAddress">
>> <ZipCodeFaultString> No proper zip code
>> found!</</ZipCodeFaultString>
>> </ns2:ZipCode_fault>
>> </detail>
>> </env:Fault>
>> </env:Body>
>> </env:Envelope>
>>
>> Part of the ode log:
>>
>> DEBUG - GeronimoLog.debug(66) | Response from provider was: [<?xml
>> version="1.0" encoding="UTF-8"?>
>> <ns2:ZipCode_fault
>> xmlns:ns2="http://services.sopware.org/ZipCodeFromAddress
>> "><ZipCodeFaultString>No
>> proper zip code found!</ZipCodeFaultString></ns2:ZipCode_fault>
>> ]
>> DEBUG - GeronimoLog.debug(66) | replyWithFailure
>> mex=hqejbhcnphr3ldqk8dnsww
>> failureType=OTHER description=SOPERA service replies with error message
>> details=[message: null]
>> DEBUG - GeronimoLog.debug(66) | Invoking message response for mexid
>> hqejbhcnphr3ldqk8dnsww and channel 23
>> DEBUG - GeronimoLog.debug(66) | Triggering response
>> ERROR - GeronimoLog.error(104) | Failure during invoke: SOPERA service
>> replies with error message
>> DEBUG - GeronimoLog.debug(66) | ActivityRecovery: Activity 13 requires
>> recovery
>> INFO - GeronimoLog.info(79) | ActivityRecovery: Registering activity 13,
>> failure reason: SOPERA service replies with error message on channel 24
>> DEBUG - GeronimoLog.debug(66) | Setting execution state on instance 25435
>> 15.09.2008 14:07:28
>> org.sbb.management.messaging.impl.OperationMonitorBackend
>> INFO: added response time for operation getZipCodeFromAddress : 125
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Ode-fault-handling-tp19492019p19492019.html
>> Sent from the Apache Ode User mailing list archive at Nabble.com.
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Ode-fault-handling-tp19492019p19507295.html
Sent from the Apache Ode User mailing list archive at Nabble.com.