You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by rduhard <re...@duhard.ca> on 2009/12/18 02:06:34 UTC

CXF return fault when WS-Addressing MAPs are not present?

Is it possible to have CXF reject messages with a Fault automatically for
endpoints that require Addressing where the request is either missing them
altogether or missing certain required fields (i.e. missing messageID when
ReplyTo is present)?

Currently if a client sends a request without MAPs it ignores that fact and
processes as normal (all i get are warnings in my console) or if there are
missing elements (i.e. messageID), it eventually faults out on a null
pointer exception when anything tries to process these non-existent
addressing properties.. it seems like CXF should recognize before then that
certain properties (or all) are missing and fault out before continuing. 

I have the following defined in my WSDL:binding
		<wsaw:UsingAddressing wsdl:required="true" />

and also have the following within my spring endpoint configuration:
                 <jaxws:features> 
			<wsa:addressing/> 
		</jaxws:features>

Is there a way to do this in CXF and I'm maybe missing something or is this
the expected behaviour?

Thanks,
Rebecca
-- 
View this message in context: http://old.nabble.com/CXF-return-fault-when-WS-Addressing-MAPs-are-not-present--tp26837662p26837662.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: CXF return fault when WS-Addressing MAPs are not present?

Posted by Eoghan Glynn <eo...@gmail.com>.
Hi Rebecca,

Try changing your config as follows:

<jaxws:features>
    <wsa:addressing isAddressingRequired="true"/>
<jaxws:features>

Cheers,
Eoghan

2009/12/18 rduhard <re...@duhard.ca>

>
> Is it possible to have CXF reject messages with a Fault automatically for
> endpoints that require Addressing where the request is either missing them
> altogether or missing certain required fields (i.e. missing messageID when
> ReplyTo is present)?
>
> Currently if a client sends a request without MAPs it ignores that fact and
> processes as normal (all i get are warnings in my console) or if there are
> missing elements (i.e. messageID), it eventually faults out on a null
> pointer exception when anything tries to process these non-existent
> addressing properties.. it seems like CXF should recognize before then that
> certain properties (or all) are missing and fault out before continuing.
>
> I have the following defined in my WSDL:binding
>                <wsaw:UsingAddressing wsdl:required="true" />
>
> and also have the following within my spring endpoint configuration:
>                 <jaxws:features>
>                        <wsa:addressing/>
>                </jaxws:features>
>
> Is there a way to do this in CXF and I'm maybe missing something or is this
> the expected behaviour?
>
> Thanks,
> Rebecca
> --
> View this message in context:
> http://old.nabble.com/CXF-return-fault-when-WS-Addressing-MAPs-are-not-present--tp26837662p26837662.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>
>

Re: CXF return fault when WS-Addressing MAPs are not present?

Posted by Daniel Kulp <dk...@apache.org>.
On Wed January 27 2010 5:31:52 pm rduhard wrote:
> I haven't had a chance to create a sample demonstrating the problem yet but
>  I did a little bit of digging...
> 
> I've found that if you have BOTH the wsa:addressing feature in your Spring
> configuration and wsaw:UsingAddressing in your WSDL, it will not work. The
> only way i've gotten it to throw the proper soap Fault for not including
> MAPs when required is to have it in the WSDL only.
> 
> Basically I tracked the problem down to the fact that when setting up the
> endpoint, it reads the features section in the configuration and creates a
> WSAddressingFeature object for the endpoint.  Then later when reading the
> WSDL ( JaxWsEndpointImpl.extractWsdlExtensibilities(EndpointInfo endpoint)
> ), it reads the addressing requirement from the binding and creates a new
> WSAddressingFeature object and sets the "required" attribute accordingly in
> the MAPAggregator, however, that new WSAddressingFeature object will get
> thrown out since one was already created earlier ( See
> JaxWsEndpointImpl.addAddressingFeature(AbstractFeature a) ) but
> unfortunately, this earlier object has no way to specify that addressing is
> "required" from the spring config.

OK.   This sounds like a deficiency in the spring config and should be treated 
as a feature request.   In general, if something is in the config, it would 
override stuff in the wsdl.   That's kind of what you are seeing.   However, 
in this case, we'd need to add some flags to allow setting the "required" bit 
in the config.


> Now i'm not sure if these 2 addressing declarations are meant to be
>  mutually exclusive or not but I would guess not since there's no way in
>  the Spring configuration to specify "required".  We do have a WSDL first
>  service and I can leave it as is and remove the Spring configuration
>  addressing feature out, however, I'm not sure then what that cxf Spring
>  feature definition actually gives you or what it's purpose truly is.

Well, it allows turning on addressing in code first cases and such where wsdl 
doesn't exist.   The lack of required thing is definitely an issue.

Dan


 
> So I'm not sure if this is a bug in that if you specify addressing in both
> places it should combine properties from both into one WSAddressingFeature,
> or if this is by design and you are not meant to have both defined within
> the same service.   I will work on getting a sample up that will easily
> demonstrate the issue as soon as I can but in the meantime I'm hoping this
> helps with determining if this is in fact a bug at the very least.
> 
> And regarding the missing MessageID, I believe you're correct in that this
> is probably another issue, especially in the case where addressing is
> optional but some properties must be present with other properties in cases
> where they are sent. I didn't have a chance to look into this at all as I
> was only concerned with the case where addressing was required.
> 
> Rebecca
> 
> rduhard wrote:
> > Ok I'll try to whip up a test case and get it posted asap.
> >
> > I'm using the latest release 2.2.5 of CXF.
> >
> > Thanks!
> >
> > dkulp wrote:
> >> This SOUND like a bug.   If wsdl:required="true" is there, according to
> >> spec,
> >> that implies that the addressing is required.  Please log a bug and
> >> attach a
> >> small test case if you can.  (like modify the hello world or something)
> >>
> >> Actually, you kind of have two bugs.  The "required" bug and the
> >> messageID/ReplyTo thing.
> >>
> >> BTW:  What version of CXF?
> >>
> >> Dan
> >>
> >> On Thu December 17 2009 8:06:34 pm rduhard wrote:
> >>> Is it possible to have CXF reject messages with a Fault automatically
> >>> for
> >>> endpoints that require Addressing where the request is either missing
> >>> them
> >>> altogether or missing certain required fields (i.e. missing messageID
> >>> when
> >>> ReplyTo is present)?
> >>>
> >>> Currently if a client sends a request without MAPs it ignores that fact
> >>> and
> >>> processes as normal (all i get are warnings in my console) or if there
> >>> are
> >>> missing elements (i.e. messageID), it eventually faults out on a null
> >>> pointer exception when anything tries to process these non-existent
> >>> addressing properties.. it seems like CXF should recognize before then
> >>> that
> >>> certain properties (or all) are missing and fault out before
> >>> continuing.
> >>>
> >>> I have the following defined in my WSDL:binding
> >>> 		<wsaw:UsingAddressing wsdl:required="true" />
> >>>
> >>> and also have the following within my spring endpoint configuration:
> >>>                  <jaxws:features>
> >>> 			<wsa:addressing/>
> >>> 		</jaxws:features>
> >>>
> >>> Is there a way to do this in CXF and I'm maybe missing something or is
> >>> this
> >>> the expected behaviour?
> >>>
> >>> Thanks,
> >>> Rebecca
> 

-- 
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog

Re: CXF return fault when WS-Addressing MAPs are not present?

Posted by rduhard <re...@duhard.ca>.
I haven't had a chance to create a sample demonstrating the problem yet but I
did a little bit of digging...

I've found that if you have BOTH the wsa:addressing feature in your Spring
configuration and wsaw:UsingAddressing in your WSDL, it will not work. The
only way i've gotten it to throw the proper soap Fault for not including
MAPs when required is to have it in the WSDL only.

Basically I tracked the problem down to the fact that when setting up the
endpoint, it reads the features section in the configuration and creates a
WSAddressingFeature object for the endpoint.  Then later when reading the
WSDL ( JaxWsEndpointImpl.extractWsdlExtensibilities(EndpointInfo endpoint)
), it reads the addressing requirement from the binding and creates a new
WSAddressingFeature object and sets the "required" attribute accordingly in
the MAPAggregator, however, that new WSAddressingFeature object will get
thrown out since one was already created earlier ( See 
JaxWsEndpointImpl.addAddressingFeature(AbstractFeature a) ) but
unfortunately, this earlier object has no way to specify that addressing is
"required" from the spring config.

Now i'm not sure if these 2 addressing declarations are meant to be mutually
exclusive or not but I would guess not since there's no way in the Spring
configuration to specify "required".  We do have a WSDL first service and I
can leave it as is and remove the Spring configuration addressing feature
out, however, I'm not sure then what that cxf Spring feature definition
actually gives you or what it's purpose truly is.

So I'm not sure if this is a bug in that if you specify addressing in both
places it should combine properties from both into one WSAddressingFeature,
or if this is by design and you are not meant to have both defined within
the same service.   I will work on getting a sample up that will easily
demonstrate the issue as soon as I can but in the meantime I'm hoping this
helps with determining if this is in fact a bug at the very least. 

And regarding the missing MessageID, I believe you're correct in that this
is probably another issue, especially in the case where addressing is
optional but some properties must be present with other properties in cases
where they are sent. I didn't have a chance to look into this at all as I
was only concerned with the case where addressing was required.

Rebecca



rduhard wrote:
> 
> Ok I'll try to whip up a test case and get it posted asap.
> 
> I'm using the latest release 2.2.5 of CXF.
> 
> Thanks!
> 
> 
> dkulp wrote:
>> 
>> 
>> This SOUND like a bug.   If wsdl:required="true" is there, according to
>> spec, 
>> that implies that the addressing is required.  Please log a bug and
>> attach a 
>> small test case if you can.  (like modify the hello world or something)
>> 
>> Actually, you kind of have two bugs.  The "required" bug and the 
>> messageID/ReplyTo thing.
>> 
>> BTW:  What version of CXF?     
>> 
>> Dan
>> 
>> 
>> On Thu December 17 2009 8:06:34 pm rduhard wrote:
>>> Is it possible to have CXF reject messages with a Fault automatically
>>> for
>>> endpoints that require Addressing where the request is either missing
>>> them
>>> altogether or missing certain required fields (i.e. missing messageID
>>> when
>>> ReplyTo is present)?
>>> 
>>> Currently if a client sends a request without MAPs it ignores that fact
>>> and
>>> processes as normal (all i get are warnings in my console) or if there
>>> are
>>> missing elements (i.e. messageID), it eventually faults out on a null
>>> pointer exception when anything tries to process these non-existent
>>> addressing properties.. it seems like CXF should recognize before then
>>> that
>>> certain properties (or all) are missing and fault out before continuing.
>>> 
>>> I have the following defined in my WSDL:binding
>>> 		<wsaw:UsingAddressing wsdl:required="true" />
>>> 
>>> and also have the following within my spring endpoint configuration:
>>>                  <jaxws:features>
>>> 			<wsa:addressing/>
>>> 		</jaxws:features>
>>> 
>>> Is there a way to do this in CXF and I'm maybe missing something or is
>>> this
>>> the expected behaviour?
>>> 
>>> Thanks,
>>> Rebecca
>>> 
>> 
>> -- 
>> Daniel Kulp
>> dkulp@apache.org
>> http://www.dankulp.com/blog
>> 
>> 
> 
> 

-- 
View this message in context: http://old.nabble.com/CXF-return-fault-when-WS-Addressing-MAPs-are-not-present--tp26837662p27347975.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: CXF return fault when WS-Addressing MAPs are not present?

Posted by rduhard <re...@duhard.ca>.
Ok I'll try to whip up a test case and get it posted asap.

I'm using the latest release 2.2.5 of CXF.

Thanks!


dkulp wrote:
> 
> 
> This SOUND like a bug.   If wsdl:required="true" is there, according to
> spec, 
> that implies that the addressing is required.  Please log a bug and attach
> a 
> small test case if you can.  (like modify the hello world or something)
> 
> Actually, you kind of have two bugs.  The "required" bug and the 
> messageID/ReplyTo thing.
> 
> BTW:  What version of CXF?     
> 
> Dan
> 
> 
> On Thu December 17 2009 8:06:34 pm rduhard wrote:
>> Is it possible to have CXF reject messages with a Fault automatically for
>> endpoints that require Addressing where the request is either missing
>> them
>> altogether or missing certain required fields (i.e. missing messageID
>> when
>> ReplyTo is present)?
>> 
>> Currently if a client sends a request without MAPs it ignores that fact
>> and
>> processes as normal (all i get are warnings in my console) or if there
>> are
>> missing elements (i.e. messageID), it eventually faults out on a null
>> pointer exception when anything tries to process these non-existent
>> addressing properties.. it seems like CXF should recognize before then
>> that
>> certain properties (or all) are missing and fault out before continuing.
>> 
>> I have the following defined in my WSDL:binding
>> 		<wsaw:UsingAddressing wsdl:required="true" />
>> 
>> and also have the following within my spring endpoint configuration:
>>                  <jaxws:features>
>> 			<wsa:addressing/>
>> 		</jaxws:features>
>> 
>> Is there a way to do this in CXF and I'm maybe missing something or is
>> this
>> the expected behaviour?
>> 
>> Thanks,
>> Rebecca
>> 
> 
> -- 
> Daniel Kulp
> dkulp@apache.org
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: http://old.nabble.com/CXF-return-fault-when-WS-Addressing-MAPs-are-not-present--tp26837662p26876361.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: CXF return fault when WS-Addressing MAPs are not present?

Posted by Daniel Kulp <dk...@apache.org>.
This SOUND like a bug.   If wsdl:required="true" is there, according to spec, 
that implies that the addressing is required.  Please log a bug and attach a 
small test case if you can.  (like modify the hello world or something)

Actually, you kind of have two bugs.  The "required" bug and the 
messageID/ReplyTo thing.

BTW:  What version of CXF?     

Dan


On Thu December 17 2009 8:06:34 pm rduhard wrote:
> Is it possible to have CXF reject messages with a Fault automatically for
> endpoints that require Addressing where the request is either missing them
> altogether or missing certain required fields (i.e. missing messageID when
> ReplyTo is present)?
> 
> Currently if a client sends a request without MAPs it ignores that fact and
> processes as normal (all i get are warnings in my console) or if there are
> missing elements (i.e. messageID), it eventually faults out on a null
> pointer exception when anything tries to process these non-existent
> addressing properties.. it seems like CXF should recognize before then that
> certain properties (or all) are missing and fault out before continuing.
> 
> I have the following defined in my WSDL:binding
> 		<wsaw:UsingAddressing wsdl:required="true" />
> 
> and also have the following within my spring endpoint configuration:
>                  <jaxws:features>
> 			<wsa:addressing/>
> 		</jaxws:features>
> 
> Is there a way to do this in CXF and I'm maybe missing something or is this
> the expected behaviour?
> 
> Thanks,
> Rebecca
> 

-- 
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog