Dan,
Thanks for the reply.
I had trouble building my project with SNAPSHOT not sure why that is, but I
didn't have time to track it down, so I'm using 2.2.4 for now.
It turns out that my solution is slightly different than what I copied in my
earlier post.
MyQueryHandlerRegistry.setBus injects MyWSDLQueryHandler into the bus, but
the actual substitution is done by MyQueryHandlerRegistry.getHandlers which
returns
MyWSDLQueryHandler instead of the default one.
Then I insert Xml elements to build my header things inside the
MyWSDLQueryHandler.updateDoc
>>Instead of injecting the Bus, you could inject the QueryHandlerRegistry
directly.
Not sure what did you mean by: "inject the QueryHandlerRegistry directly"
could you elaborate a bit more?
PS
I can build CXF trunk, but need a bit more time before I would be ready to
commit.. watching for now..
Thanks,
-Vitaly
dkulp wrote:
>
>
> Some of this is already changed pretty significantly on trunk/2.3. On
> trunk,
> when the QueryHandlerRegistryImpl starts up (which is lazy init on trunk,
> btw,
> thus, the first time it's needed), it queries the context for all the
> beans
> that implement QueryHandler and auto registers them.
>
> I think the ordering might be a problem with this though. I THINK it's
> currently ordering them in the order they appear in the configs (taking
> into
> account depends-on attributes). However, thinking about it, I think it
> should be reverse. With the last being put in slot 0.
>
> Basically, I'd love it if you could take your test case and see how it
> would
> work with 2.3 snapshots. Possibly submit a patch to
> QueryHandlerRegistryImpl
> to get the ordering "correct".
>
> One other note:
> Instead of injecting the Bus, you could inject the QueryHandlerRegistry
> directly.
>
> Dan
>
>
> On Sat October 24 2009 12:11:08 pm vickatvuuch wrote:
>> Thanks a bunch for the ideas!
>>
>> Here is what worked for me:
>>
>> 1. I defined my version of MyWSDLQueryHandler extends WSDLQueryHandler
>> (will override updateDoc and sneak in my header elements there later)
>>
>> 2. Defined my version of MyQueryHandlerRegistry implement
>> QueryHandlerRegistry
>> and did this little hack:
>>
>> @Override
>> public void setBus(Bus b)
>> {
>> super.setBus(b);
>>
>> QueryHandlerRegistry reg =
>> b.getExtension(QueryHandlerRegistry.class);
>>
>> for (Iterator<QueryHandler> it = reg.getHandlers().iterator();
>> it.hasNext(); it.next())
>> {
>> if (it.next() instanceof WSDLQueryHandler) {
>> MyWSDLQueryHandler myHandler = new MyWSDLQueryHandler(b);
>>
>> reg.registerHandler(myHandler,0);
>> break;
>> }
>> }
>>
>> }
>>
>> note: remove from iterator failed with spring exception, so
>> registerHandler
>> at position 0 seem to have
>> put mine in front of an existing one.
>>
>> 3. finally to kick start all that I added my registry bean inside
>> beans.xml
>>
>> <bean id="myQueryHandlerRegistry"
>> class="demo.spring.handler.MyQueryHandlerRegistry"/>
>>
>> PS
>> Is this something, the core team may be want to put in as an
>> extensibility
>> feature?
>> May be let the handler registry be a spring configurable child of the bus
>> that would take handlers by name or something of that sort? First default
>> once would be loaded and if additional ones are given they would override
>> default once? just a suggestion..
>>
>> Thanks again,
>> -Vitaly
>>
>> bimargulies wrote:
>> > We are a little outside my expertise, but I'd advise:
>> >
>> > Define a bean class that gets the CXF bug injected.
>> >
>> >
>> > @Resource
>> > public void setBus(Bus bus) {
>> > if (this.bus != bus) {
>> > this.bus = bus;
>> > registerWithBindingManager();
>> > }
>> >
>> >
>> > And put the code in there. What I don't know is how to make sure that
>> you
>> > get called at the right time: after the handler registry is set up.
>> There
>> > are other people who, with any luck, will chime in.
>> >
>> > On Sat, Oct 24, 2009 at 10:52 AM, vickatvuuch <[email protected]>
>> wrote:
>> >> can it be done from the config file?
>> >>
>> >> so far I was using beans.xml to configure everything - bus and
>> >> endpoints, interceptors, etc.
>> >>
>> >> bimargulies wrote:
>> >> > org.apache.cxf.transport.http.QueryHandlerRegistryImpl
>> >> >
>> >> > Walk the bus:
>> >> >
>> >> > for (QueryHandler qh :
>> >> > bus.getExtension(QueryHandlerRegistry.class).getHandlers()) {
>> >> > }
>> >> >
>> >> > and when you find the regular handler, replace it with yours.
>> >> >
>> >> > And perhaps open a JIRA suggesting that QueryHandlerRegistryImpl be
>> >> > friendlier to customization here.
>> >> >
>> >> >
>> >> > On Sat, Oct 24, 2009 at 10:17 AM, vickatvuuch <[email protected]>
>> >>
>> >> wrote:
>> >> >> Thanks!
>> >> >>
>> >> >> it sounds promising; do you mind sharing how to tell the bus that
>> it
>> >> >> should
>> >> >> run my handler?
>> >> >>
>> >> >> Thanks,
>> >> >> -Vitaly
>> >> >>
>> >> >> bimargulies wrote:
>> >> >> > The handler is registered as an object on the bus. You can
>> register
>> >> >>
>> >> >> yours
>> >> >>
>> >> >> > instead.
>> >> >> >
>> >> >> > On Fri, Oct 23, 2009 at 6:19 PM, vickatvuuch
>> <[email protected]>
>> >> >>
>> >> >> wrote:
>> >> >> >> Some digging led me to the WSDLQueryHandler.updateDoc method.
>> >> >> >> I could add my header elements as a sibling of each input
>> element
>> >>
>> >> in
>> >>
>> >> >> >> there;
>> >> >> >> now the question is how can I override WSDLQueryHandler with my
>> >> >> >> implementation? is it possible to give CXF my derived class that
>> >> >>
>> >> >> extends
>> >> >>
>> >> >> >> WSDLQueryHandler?
>> >> >> >>
>> >> >> >> vickatvuuch wrote:
>> >> >> >> > Hi CXF gurus!
>> >> >> >> >
>> >> >> >> > I need to add a custom header element to all my endpoints as a
>> >>
>> >> place
>> >>
>> >> >> >> for
>> >> >> >>
>> >> >> >> > client to stick a session token.
>> >> >> >> >
>> >> >> >> > For example I need to add this message xml element once:
>> >> >> >> >
>> >> >> >> > <wsdl:message name="Authentication">
>> >> >> >> > <wsdl:part name="Authentication" type="tns1:SessionInfo"/>
>> >> >> >> > </wsdl:message><br/>
>> >> >> >> >
>> >> >> >> > and a chunk of xml in bold below, to every port and every
>> >> >> >>
>> >> >> >> operation:<br/>
>> >> >> >>
>> >> >> >> > <wsdl:operation name="getFoo">
>> >> >> >> > <wsdlsoap:operation soapAction="getFoo"/>
>> >> >> >> > <wsdl:input name="getFoo">
>> >> >> >> > <wsdlsoap:body
>> >> >> >> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> >> >> >>
>> >> >> >> use="encoded"/>
>> >> >> >>
>> >> >> >> > <wsdlsoap:header message="impl:Authentication"
>> >> >> >> > part="Authentication"
>> >> >> >> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> >> >> >>
>> >> >> >> use="encoded"/>
>> >> >> >>
>> >> >> >> > </wsdl:input>
>> >> >> >> >
>> >> >> >> > I'm debugging it at the WSDLManager level and wonder if there
>> is
>> >>
>> >> a
>> >>
>> >> >> >> better
>> >> >> >>
>> >> >> >> > way to do it?
>> >> >> >> > May be a plug in or through an interceptor?
>> >> >> >> >
>> >> >> >> > Any help is very much appreciated.
>> >> >> >> >
>> >> >> >> > Thanks,
>> >> >> >> > -Vitaly
>> >> >> >>
>> >> >> >> --
>> >> >> >> View this message in context:
>> >> >> >>
>> http://www.nabble.com/Custom-WSDL-header-tp26030841p26034038.html
>> >> >> >> Sent from the cxf-user mailing list archive at Nabble.com.
>> >> >>
>> >> >> --
>> >> >> View this message in context:
>> >> >> http://www.nabble.com/Custom-WSDL-header-tp26030841p26039401.html
>> >> >> Sent from the cxf-user mailing list archive at Nabble.com.
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/CXF-custom-WSDL-header-or-customizing-WSDLQueryHan
>> >>dler-document-tp26030841p26039721.html Sent from the cxf-user mailing
>> >> list archive at Nabble.com.
>>
>
> --
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
>
>
--
View this message in context:
http://www.nabble.com/CXF-custom-WSDL-header-or-customizing-WSDLQueryHandler-document-tp26030841p26061525.html
Sent from the cxf-user mailing list archive at Nabble.com.