You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Jansen Werner <We...@eon-is.com> on 2006/07/05 12:41:03 UTC
RE: Adding own handler in Java Code? [SOLVED]
Hi again :)
My handlers are working. But I gave up the initial idea. This is how it works:
- The handler is included in client-config.wsdd ("hardcoded")
- The handler checks for itself if it should do anything. So I can activate and deactivate handlers "on the fly". (or, better, activate and deactivate functionality provided by those handlers)
But there's still an open issue: BeanSerializers and Namespaces. But I will post that in another mail to this list, so the subject doesn't get confused.
Have a nice day! :)
CU
Werner
> -----Original Message-----
> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
> Sent: Tuesday, July 04, 2006 3:02 PM
> To: axis-user@ws.apache.org
> Subject: Re: Adding own handler in Java Code?
>
> Ok, what I described you allows you to configure your chain in a
> per-call basis. If you just need it per-execution, it becomes
> simpler :-)
>
> But... why do you want to do this programmatically? Is it for
> usability
> reasons?
>
> If you want to select the set of handlers to use before starting your
> application, you can implement a standalone tool that could allow you
> to "visually" edit your client-config.wsdd, and show a
> simplified GUI to
> select among the available handlers. I would like a copy of
> such a tool :-D
>
> If you know which handlers you will need before starting to use Axis,
> you can generate your client-config.wsdd from within your
> application,
> and use the generated WSDD as the configuration for your Axis engine.
>
> If you want to go through the Axis API and modify the
> configuration once
> all has started, the quick answer is "you can't". Axis is not
> prepared
> to let you add and remove handlers as you like. There are several
> conditions that will change what you need to call/do in order to make
> things work.
>
> First, you cannot remove handlers from chains. They have no
> methods for
> this.
>
> Second, handlers (and chains) can optionally be deployed as
> singletons.
> When in singleton mode, changes to the WSDD deployment
> descriptor will
> not affect an existing instance, and you will have to directly modify
> the instance itself. When not in this mode, Axis will create a new
> instance each time the "get" method is called, and so, any change you
> make to an instance will not have effect on the actual flow.
>
> Third, you can only add handlers to the end of a chain, but usually
> handlers must be deployed in different order depending on
> which flow you
> are adding them to. The response flow uses a reversed order
> with respect
> to the request one. This means that you must add all
> necessary handlers
> at once. Adding them incrementally will not work.
>
> And fourth, the things you need to do require using several internal
> classes that are not considered part of the Axis stable API.
> This means
> that you may have severe problems whenever you want to
> upgrade the Axis
> version.
>
> Although it may seem too complex, I still think that the approach I
> proposed you before is the best one. You can make
> DynamicChain get the
> list of active handlers from a Singleton class of your own,
> and use that
> class to specify which handlers you add or remove. This way your
> application code is kept simple.
>
>
> Hope this helps,
> Rodrigo Ruiz
>
>
> Jansen Werner wrote:
> > Hi Rodrigo,
> >
> > is it really that complicated to include a handler? Within
> server-config.wsdd, it's just a single line to include the
> (example) LogHandler, why is it so complicated to inject it via API?
> >
> > As a resumee, this is what I want to do:
> >
> > - add a Handler to Message Processing. Nothing complicated.
> Complexity similar to the org.apache.axis.handlers.LogHandler
> provided by Axis.
> > - do this in client and server
> > - within the server, this is easy using <handler>-Tags in
> server-config.wsdd, because the handler is needed always.
> This works already.
> > - within the client, client-config.wsdd is inappropriate,
> because the handler isn't used on every run of the client.
> > - How is it possible to inject a (simple) Handler via Java
> Calls the way it would be in client-config.wsdd or
> server-config.wsdd. As an example, I'm still trying to use
> the LogHandler provided by Axis (which extends
> org.apache.axis.handlers.BaseHandler, which itself implements
> org.apache.axis.Handler (which does only extend Serializable,
> and no javax.rpc-Interface).
> >
> > I thought this must be a very simple thing to do. What you
> wrote sounds profound but is very complicated for a (in my
> eyes) simple thing: adding a Handler to message Processing.
> >
> > ... hoping for an answer ... :)
> >
> > CU
> > Werner
> >
> >> -----Original Message-----
> >> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
> >> Sent: Tuesday, July 04, 2006 11:06 AM
> >> To: axis-user@ws.apache.org
> >> Subject: Re: Adding own handler in Java Code?
> >>
> >> Hi Jansen,
> >>
> >> Ideally you should be able to create a custom chain and
> deploy it in
> >> your client-config.wsdd as an actual chain. Unfortunately,
> Axis WSDD
> >> syntax does not allow to deploy custom chains. When you
> put a <chain>
> >> tag, it always creates a SimpleChain instance.
> >>
> >> I would create a JIRA report to ask for the ability to specify a
> >> different class name for the Chain implementation. Something
> >> similar to
> >> the type attribute for handlers.
> >>
> >> In the meantime, you could try to write your own custom chain
> >> and deploy
> >> it as any other regular handler. Your chain would allow you
> >> to configure
> >> the list of handlers to be included, *before* performing the call,
> >> through the MessageContext, or any other appropriate
> channel. If I am
> >> not wrong, setting a property on the service client stub makes it
> >> available from the MessageContext during handlers invocation.
> >>
> >> Configuring the handlers within your custom chain should
> be straight
> >> forward once the WSDD syntax is extended. With the current
> syntax you
> >> have two options:
> >>
> >> 1. Use a secondary WSDD file with the contained handler
> >> configurations
> >> and parse it from your chain init() method.
> >>
> >> 2. Define all your handlers in your wsdd configuration file
> >> with unique
> >> names, set a property for your chain containing a list of
> >> handler names,
> >> and obtain the handler instances from the init() method.
> >>
> >> Instead of adding/removing handlers, it is easier to
> enable/disable
> >> them. This way, you can initialise all the handlers once,
> and specify
> >> its ordering at configuration time. At runtime you will
> just have to
> >> supply a list(or set) of the handlers that must be enabled
> for a call.
> >>
> >> I attach a simple template class that may be of help. It
> >> implements the
> >> second option mentioned above.
> >>
> >> Regards,
> >> Rodrigo Ruiz
> >>
> >> Jansen Werner wrote:
> >>> Thanks for you reply!
> >>>
> >>>> -----Original Message-----
> >>>> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
> >>>> Sent: Monday, July 03, 2006 3:57 PM
> >>>> To: axis-user@ws.apache.org
> >>>> Subject: Re: Adding own handler in Java Code?
> >>>>
> >>>> Hi Jansen,
> >>>>
> >>>> The answer depends on what you mean be "add dynamically". :-)
> >>>>
> >>>> If you mean "add a jar at runtime and have it automatically
> >>>> recognized",
> >>>> the answer is that it is very hard. You will need Axis 2
> >> to have this
> >>>> feature built in, or implement yourself a dynamic
> >>>> class-loader like the
> >>>> one used by Axis 2, and a handler with the ability to detect
> >>>> the changes
> >>>> at runtime, and call these "dynamic" handlers when appropriate.
> >>> No, I'm lucky, this is not what I meant :)
> >>>
> >>>
> >>>> If you mean "selecting a subset among an already
> well-known set of
> >>>> available handlers", the answer is that it is easier :-)
> >>>>
> >>>> You will have to create a handler that could act as a
> >>>> "handler chain",
> >>>> and put into it the logic to take the decision about what
> >> handlers to
> >>>> actually call when invoked. Depending on what you need,
> >> this handler
> >>>> will have the information needed to find out the handlers to
> >>>> call (for
> >>>> example, by parsing a policy), or you may have to include the
> >>>> mechanisms
> >>>> to communicate with it from the service implementations or
> >>>> other points,
> >>>> and configure it at runtime.
> >>> OK, this sounds like my problem.
> >>>
> >>> For an example, let's take the LogHandler packaged with
> >> axis. How can I
> >>> add this (simple, easy) Handler to Axis at runtime? (And
> >> remove it later
> >>> ...).
> >>>
> >>> I have found a way to access the HandlerRegistry
> >>> (Service.getHandlerRegistry()). But - without deeper
> >> knowledge of the
> >>> HandlerChains available - how do I add my Handler (or the
> LogHandler
> >>> mentioned above)?
> >>>
> >>>> Just keep in mind that you need to respect the handlers
> >>>> interface, and
> >>>> call their methods in the appropriate order. That is, to
> >>>> initialise them
> >>>> before invoking them, and the like.
> >>> This is something I will concentrate on when I managed to add the
> >>> LogHandler provided by Axis :)
> >>>
> >>> Ah, before I forget it again, our Axis version is 1.3 :)
> >>>
> >>> Thanks in advance :)
> >>>
> >>> CU
> >>> Werner
> >>>
> >>>
> >>>
> >>
> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> >>> For additional commands, e-mail: axis-user-help@ws.apache.org
> >>>
> >>>
> >>>
> >> --
> >> -------------------------------------------------------------------
> >> GRIDSYSTEMS Rodrigo Ruiz Aguayo
> >> Parc Bit - Son Espanyol
> >> 07120 Palma de Mallorca mailto:rruiz@gridsystems.com
> >> Baleares - España Tel:+34-971435085 Fax:+34-971435082
> >> http://www.gridsystems.com
> >> -------------------------------------------------------------------
> >>
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-user-help@ws.apache.org
> >
> >
> >
>
> --
> -------------------------------------------------------------------
> GRIDSYSTEMS Rodrigo Ruiz Aguayo
> Parc Bit - Son Espanyol
> 07120 Palma de Mallorca mailto:rruiz@gridsystems.com
> Baleares - España Tel:+34-971435085 Fax:+34-971435082
> http://www.gridsystems.com
> -------------------------------------------------------------------
>
>
> --
> No virus found in this outgoing message.
> Checked by AVG Free Edition.
> Version: 7.1.394 / Virus Database: 268.9.8/381 - Release
> Date: 03/07/2006
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org
Re: Adding own handler in Java Code? [SOLVED]
Posted by Rodrigo Ruiz <rr...@gridsystems.com>.
Greetings!
Enabling and disabling other arbitrary handlers is the hard option.
Implement a handler that can enable/disable itself is considerably
easier :-D
CU & Good luck!
Jansen Werner wrote:
> Hi again :)
>
> My handlers are working. But I gave up the initial idea. This is how it works:
>
> - The handler is included in client-config.wsdd ("hardcoded")
> - The handler checks for itself if it should do anything. So I can activate and deactivate handlers "on the fly". (or, better, activate and deactivate functionality provided by those handlers)
>
> But there's still an open issue: BeanSerializers and Namespaces. But I will post that in another mail to this list, so the subject doesn't get confused.
>
> Have a nice day! :)
>
> CU
> Werner
>
>> -----Original Message-----
>> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
>> Sent: Tuesday, July 04, 2006 3:02 PM
>> To: axis-user@ws.apache.org
>> Subject: Re: Adding own handler in Java Code?
>>
>> Ok, what I described you allows you to configure your chain in a
>> per-call basis. If you just need it per-execution, it becomes
>> simpler :-)
>>
>> But... why do you want to do this programmatically? Is it for
>> usability
>> reasons?
>>
>> If you want to select the set of handlers to use before starting your
>> application, you can implement a standalone tool that could allow you
>> to "visually" edit your client-config.wsdd, and show a
>> simplified GUI to
>> select among the available handlers. I would like a copy of
>> such a tool :-D
>>
>> If you know which handlers you will need before starting to use Axis,
>> you can generate your client-config.wsdd from within your
>> application,
>> and use the generated WSDD as the configuration for your Axis engine.
>>
>> If you want to go through the Axis API and modify the
>> configuration once
>> all has started, the quick answer is "you can't". Axis is not
>> prepared
>> to let you add and remove handlers as you like. There are several
>> conditions that will change what you need to call/do in order to make
>> things work.
>>
>> First, you cannot remove handlers from chains. They have no
>> methods for
>> this.
>>
>> Second, handlers (and chains) can optionally be deployed as
>> singletons.
>> When in singleton mode, changes to the WSDD deployment
>> descriptor will
>> not affect an existing instance, and you will have to directly modify
>> the instance itself. When not in this mode, Axis will create a new
>> instance each time the "get" method is called, and so, any change you
>> make to an instance will not have effect on the actual flow.
>>
>> Third, you can only add handlers to the end of a chain, but usually
>> handlers must be deployed in different order depending on
>> which flow you
>> are adding them to. The response flow uses a reversed order
>> with respect
>> to the request one. This means that you must add all
>> necessary handlers
>> at once. Adding them incrementally will not work.
>>
>> And fourth, the things you need to do require using several internal
>> classes that are not considered part of the Axis stable API.
>> This means
>> that you may have severe problems whenever you want to
>> upgrade the Axis
>> version.
>>
>> Although it may seem too complex, I still think that the approach I
>> proposed you before is the best one. You can make
>> DynamicChain get the
>> list of active handlers from a Singleton class of your own,
>> and use that
>> class to specify which handlers you add or remove. This way your
>> application code is kept simple.
>>
>>
>> Hope this helps,
>> Rodrigo Ruiz
>>
>>
>> Jansen Werner wrote:
>>> Hi Rodrigo,
>>>
>>> is it really that complicated to include a handler? Within
>> server-config.wsdd, it's just a single line to include the
>> (example) LogHandler, why is it so complicated to inject it via API?
>>> As a resumee, this is what I want to do:
>>>
>>> - add a Handler to Message Processing. Nothing complicated.
>> Complexity similar to the org.apache.axis.handlers.LogHandler
>> provided by Axis.
>>> - do this in client and server
>>> - within the server, this is easy using <handler>-Tags in
>> server-config.wsdd, because the handler is needed always.
>> This works already.
>>> - within the client, client-config.wsdd is inappropriate,
>> because the handler isn't used on every run of the client.
>>> - How is it possible to inject a (simple) Handler via Java
>> Calls the way it would be in client-config.wsdd or
>> server-config.wsdd. As an example, I'm still trying to use
>> the LogHandler provided by Axis (which extends
>> org.apache.axis.handlers.BaseHandler, which itself implements
>> org.apache.axis.Handler (which does only extend Serializable,
>> and no javax.rpc-Interface).
>>>
>>> I thought this must be a very simple thing to do. What you
>> wrote sounds profound but is very complicated for a (in my
>> eyes) simple thing: adding a Handler to message Processing.
>>> ... hoping for an answer ... :)
>>>
>>> CU
>>> Werner
>>>
>>>> -----Original Message-----
>>>> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
>>>> Sent: Tuesday, July 04, 2006 11:06 AM
>>>> To: axis-user@ws.apache.org
>>>> Subject: Re: Adding own handler in Java Code?
>>>>
>>>> Hi Jansen,
>>>>
>>>> Ideally you should be able to create a custom chain and
>> deploy it in
>>>> your client-config.wsdd as an actual chain. Unfortunately,
>> Axis WSDD
>>>> syntax does not allow to deploy custom chains. When you
>> put a <chain>
>>>> tag, it always creates a SimpleChain instance.
>>>>
>>>> I would create a JIRA report to ask for the ability to specify a
>>>> different class name for the Chain implementation. Something
>>>> similar to
>>>> the type attribute for handlers.
>>>>
>>>> In the meantime, you could try to write your own custom chain
>>>> and deploy
>>>> it as any other regular handler. Your chain would allow you
>>>> to configure
>>>> the list of handlers to be included, *before* performing the call,
>>>> through the MessageContext, or any other appropriate
>> channel. If I am
>>>> not wrong, setting a property on the service client stub makes it
>>>> available from the MessageContext during handlers invocation.
>>>>
>>>> Configuring the handlers within your custom chain should
>> be straight
>>>> forward once the WSDD syntax is extended. With the current
>> syntax you
>>>> have two options:
>>>>
>>>> 1. Use a secondary WSDD file with the contained handler
>>>> configurations
>>>> and parse it from your chain init() method.
>>>>
>>>> 2. Define all your handlers in your wsdd configuration file
>>>> with unique
>>>> names, set a property for your chain containing a list of
>>>> handler names,
>>>> and obtain the handler instances from the init() method.
>>>>
>>>> Instead of adding/removing handlers, it is easier to
>> enable/disable
>>>> them. This way, you can initialise all the handlers once,
>> and specify
>>>> its ordering at configuration time. At runtime you will
>> just have to
>>>> supply a list(or set) of the handlers that must be enabled
>> for a call.
>>>> I attach a simple template class that may be of help. It
>>>> implements the
>>>> second option mentioned above.
>>>>
>>>> Regards,
>>>> Rodrigo Ruiz
>>>>
>>>> Jansen Werner wrote:
>>>>> Thanks for you reply!
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Rodrigo Ruiz [mailto:rruiz@gridsystems.com]
>>>>>> Sent: Monday, July 03, 2006 3:57 PM
>>>>>> To: axis-user@ws.apache.org
>>>>>> Subject: Re: Adding own handler in Java Code?
>>>>>>
>>>>>> Hi Jansen,
>>>>>>
>>>>>> The answer depends on what you mean be "add dynamically". :-)
>>>>>>
>>>>>> If you mean "add a jar at runtime and have it automatically
>>>>>> recognized",
>>>>>> the answer is that it is very hard. You will need Axis 2
>>>> to have this
>>>>>> feature built in, or implement yourself a dynamic
>>>>>> class-loader like the
>>>>>> one used by Axis 2, and a handler with the ability to detect
>>>>>> the changes
>>>>>> at runtime, and call these "dynamic" handlers when appropriate.
>>>>> No, I'm lucky, this is not what I meant :)
>>>>>
>>>>>
>>>>>> If you mean "selecting a subset among an already
>> well-known set of
>>>>>> available handlers", the answer is that it is easier :-)
>>>>>>
>>>>>> You will have to create a handler that could act as a
>>>>>> "handler chain",
>>>>>> and put into it the logic to take the decision about what
>>>> handlers to
>>>>>> actually call when invoked. Depending on what you need,
>>>> this handler
>>>>>> will have the information needed to find out the handlers to
>>>>>> call (for
>>>>>> example, by parsing a policy), or you may have to include the
>>>>>> mechanisms
>>>>>> to communicate with it from the service implementations or
>>>>>> other points,
>>>>>> and configure it at runtime.
>>>>> OK, this sounds like my problem.
>>>>>
>>>>> For an example, let's take the LogHandler packaged with
>>>> axis. How can I
>>>>> add this (simple, easy) Handler to Axis at runtime? (And
>>>> remove it later
>>>>> ...).
>>>>>
>>>>> I have found a way to access the HandlerRegistry
>>>>> (Service.getHandlerRegistry()). But - without deeper
>>>> knowledge of the
>>>>> HandlerChains available - how do I add my Handler (or the
>> LogHandler
>>>>> mentioned above)?
>>>>>
>>>>>> Just keep in mind that you need to respect the handlers
>>>>>> interface, and
>>>>>> call their methods in the appropriate order. That is, to
>>>>>> initialise them
>>>>>> before invoking them, and the like.
>>>>> This is something I will concentrate on when I managed to add the
>>>>> LogHandler provided by Axis :)
>>>>>
>>>>> Ah, before I forget it again, our Axis version is 1.3 :)
>>>>>
>>>>> Thanks in advance :)
>>>>>
>>>>> CU
>>>>> Werner
>>>>>
>>>>>
>>>>>
>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>>>>> For additional commands, e-mail: axis-user-help@ws.apache.org
>>>>>
>>>>>
>>>>>
>>>> --
>>>> -------------------------------------------------------------------
>>>> GRIDSYSTEMS Rodrigo Ruiz Aguayo
>>>> Parc Bit - Son Espanyol
>>>> 07120 Palma de Mallorca mailto:rruiz@gridsystems.com
>>>> Baleares - España Tel:+34-971435085 Fax:+34-971435082
>>>> http://www.gridsystems.com
>>>> -------------------------------------------------------------------
>>>>
>>>
>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>>> For additional commands, e-mail: axis-user-help@ws.apache.org
>>>
>>>
>>>
>> --
>> -------------------------------------------------------------------
>> GRIDSYSTEMS Rodrigo Ruiz Aguayo
>> Parc Bit - Son Espanyol
>> 07120 Palma de Mallorca mailto:rruiz@gridsystems.com
>> Baleares - España Tel:+34-971435085 Fax:+34-971435082
>> http://www.gridsystems.com
>> -------------------------------------------------------------------
>>
>>
>> --
>> No virus found in this outgoing message.
>> Checked by AVG Free Edition.
>> Version: 7.1.394 / Virus Database: 268.9.8/381 - Release
>> Date: 03/07/2006
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>> For additional commands, e-mail: axis-user-help@ws.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
>
--
-------------------------------------------------------------------
GRIDSYSTEMS Rodrigo Ruiz Aguayo
Parc Bit - Son Espanyol
07120 Palma de Mallorca mailto:rruiz@gridsystems.com
Baleares - España Tel:+34-971435085 Fax:+34-971435082
http://www.gridsystems.com
-------------------------------------------------------------------
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.9.9/382 - Release Date: 04/07/2006
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org