OK, I'll enter this as a JIRA for whenever somebody (including myself) has
time to look at it.

Thanks,
Glen


dkulp wrote:
> 
> 
> Honestly, I think both things should be done.   We definitely  
> shouldn't be creating details where one doesn't exist and isn't  
> needed.   And hasDetails should definitely not return true if there  
> aren't details.
> 
> Dan
> 
> 
> On Jul 26, 2008, at 11:05 AM, Glen Mazza wrote:
> 
>>
>> Team,
>>
>> I'm trying to get CXF to work with WSS4J for signature/encryption  
>> right now.
>> I got the following error message back from WSS4J:
>>
>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>> <soap:Body>
>> <soap:Fault>
>> <faultcode>soap:Client</faultcode>
>> <faultstring>WSSECURITY_EX</faultstring>
>> </soap:Fault>
>> </soap:Body>
>> </soap:Envelope>
>>
>> Partial error stack that produced that message:
>> [INFO] Exception in thread "main"  
>> javax.xml.ws.soap.SOAPFaultException:
>> WSSECURITY_EX
>> [INFO]       at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java: 
>> 218)
>> [INFO]       at $Proxy27.doubleIt(Unknown Source)
>> [INFO]       at
>> com.mycompany.webservice.client.WSClient.doubleIt(WSClient.java:26)
>> [INFO]       at  
>> com.mycompany.webservice.client.WSClient.main(WSClient.java:19)
>> [INFO] Caused by: org.apache.cxf.binding.soap.SoapFault: WSSECURITY_EX
>> [INFO]       at
>> org 
>> .apache 
>> .cxf 
>> .binding 
>> .soap 
>> .interceptor 
>> .Soap11FaultInInterceptor 
>> .handleMessage(Soap11FaultInInterceptor.java:70)
>> [INFO]       at
>> org 
>> .apache 
>> .cxf 
>> .binding 
>> .soap 
>> .interceptor 
>> .Soap11FaultInInterceptor 
>> .handleMessage(Soap11FaultInInterceptor.java:35)
>> [INFO]       at
>> org 
>> .apache 
>> .cxf 
>> .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java: 
>> 221)
>>
>> The error message I'm getting is not my concern right now--it is  
>> what CXF
>> appears to be doing to it.  It seems(*) that CXF is placing an empty  
>> Detail
>> element within this SOAPFault response.  This triggers the
>> SOAPFault.hasDetail() method to be true, which causes users to need  
>> to write
>> additional code to parse through the Detail's nonexistent
>> DetailElements--which is annoying once it turns out there's no  
>> DetailEntries
>> to parse.
>>
>> The culprit seems to be org.apache.cxf.interceptor.Fault's
>> getOrCreateDetail() method, which is called by various other  
>> interceptors to
>> create Detail objects where there are actually no DetailEntries. Can  
>> we
>> avoid doing this?  I would say either of two things should be done:  
>> (1)  not
>> to create empty Detail objects if there are no DetailEntries (either  
>> when
>> parsing SOAP error messages coming in externally, or when a CXF web  
>> service
>> provider is sending back an error message), or (2) redefine
>> Fault.hasDetails() to mean that the SOAPFault has a Details object  
>> *and* has
>> DetailEntries under it.  Currently, the above XML SOAP response should
>> return false for hasDetails(), but it's returning TRUE because of  
>> the empty
>> Detail element being created.
>>
>> Another problem with artificial creation of SOAPFault Detail  
>> elements is
>> that their absence or presence has semantic value according to the  
>> SOAP
>> spec[2]:
>>
>> "The detail element is intended for carrying application specific  
>> error
>> information related to the Body element. It MUST be present if the  
>> contents
>> of the Body element could not be successfully processed. It MUST NOT  
>> be used
>> to carry information about error information belonging to header  
>> entries.
>> Detailed error information belonging to header entries MUST be carried
>> within header entries.
>>
>> The absence of the detail element in the Fault element indicates  
>> that the
>> fault is not related to processing of the Body element. This can be  
>> used to
>> distinguish whether the Body element was processed or not in case of  
>> a fault
>> situation."
>>
>> Thoughts?
>>
>> Thanks,
>> Glen
>>
>> (*) I'm saying "seems" because I'm relying on the XML response I see  
>> in
>> Wireshark and the fact that hasDetails() is returning TRUE-- 
>> indicating a
>> Details object was created.
>>
>> [1] http://java.sun.com/javaee/5/docs/api/javax/xml/soap/ 
>> SOAPFault.html
>> [2] http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507
>> -- 
>> View this message in context:
>> http://www.nabble.com/Creation-of-empty-detail-elements-for-SOAPFaults-tp18667733p18667733.html
>> Sent from the cxf-dev mailing list archive at Nabble.com.
>>
> 
> ---
> Daniel Kulp
> [EMAIL PROTECTED]
> http://www.dankulp.com/blog
> 
> 
> 
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Creation-of-empty-detail-elements-for-SOAPFaults-tp18667733p18702619.html
Sent from the cxf-dev mailing list archive at Nabble.com.

Reply via email to