Hi  Matthew.  Yes, I did try altering that line and that allowed me to catch
faults by name, but the fault variables didn't work.  This is why I wondered
if there was some larger problem.

Thanks for your response.
-Jon


On 9/29/08 12:00 PM, "Matthieu Riou" <[EMAIL PROTECTED]> wrote:

> On Mon, Sep 29, 2008 at 10:39 AM, Jonathan Coogan <
> [EMAIL PROTECTED]> wrote:
> 
>> Hi everybody.
>> 
>> I think I¹ve discovered a bug in the way Ode 1.2 handles external WSDLs
>> that
>> contain multiple namespaces.  For example, I have a web service that has
>> the
>> following format:
>> 
>> <?xml version="1.0" encoding="UTF-8"?>
>> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/";
>> xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype";
>> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>> xmlns:xyzNamespace="xyz"
>> name="SampleService" targetNamespace="abc">
>>    <plnk:partnerLinkType name="SamplePartnerLinkType">
>>        <plnk:role name="SampleRole"
>> portType="xyzNamespace:SamplePortType"/>
>>    </plnk:partnerLinkType>
>>    <import location="xyz.wsdl" namespace="xyz"/>
>>    <service name="SampleService">
>>        <port binding="xyzNamespace:SamplePortBinding" name="SamplePort">
>>            <soap:address location="http://xxxxxx/Sample"/>
>>        </port>
>>    </service>
>> </definitions>
>> 
>> The target namespace of the WSDL is "abc", but the service
>> binding/operations/faults/etc are actually declared in the "xyz" namespace.
>> As far as I can tell, this is perfectly legal.
>> 
>> The problem is that I can't get fault handling to work at all with a
>> service
>> like this.  The WSDL defines a fault in the xyz namespace.  When I
>> encounter
>> the fault, I see this in the Ode log:
>> 
>> WARN  [SoapExternalService]: Fault response: faultType={abc}SampleFault
>> 
>> What's puzzling about this is that the namespace is wrong.  The SampleFault
>> is declared in the xyz namespace, not the abc namespace.  I surmised that
>> Ode somehow assumes that the faults (and possibly other things) reside in
>> the same namespace as the top-level WSDL.
>> 
>> I did some snooping and found some code that seems to confirm this.  See
>> parseSoapFault() in:
>> 
>> 
>> http://svn.apache.org/repos/asf/ode/tags/APACHE_ODE_1.2/axis2/src/main/java/
>> org/apache/ode/axis2/util/SoapMessageConverter.java<http://svn.apache.org/rep
>> os/asf/ode/tags/APACHE_ODE_1.2/axis2/src/main/java/org/apache/ode/axis2/util/
>> SoapMessageConverter.java>
>> .
>> 
>> The last line jumped out at me:
>> 
>> return new QName(_def.getTargetNamespace(), fdef.getName());
>> 
>> Now I am not very familiar with the Ode sources, but it looks the namespace
>> is being pulled off the top-level definition.  In this case, that is
>> incorrect because the fault actually has a different namespace.
>> 
>> I'd like to know what the developers think about this.  I wonder if there
>> are other areas where the same kinds of assumptions are made.
>> 
> 
> We can't exclude another similar bug but I'm not aware of this assumption
> being taken generally. I'm pretty sure the compiler does things correctly
> when it resolves WSDL references and most of the runtime follows that
> (except as you've seen the messaging layers that are mostly independent of
> the runtime).
> 
> Have you tried to just alter that line to use the same namespace as the
> fault message?
> 
> Thanks,
> Matthieu
> 
> 
>> 
>> Thanks for your time.
>> -Jon
>> 
>> 
>> 
>> 
>> 
>> 
>> 

Reply via email to