You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Victor Rentea <vi...@gmail.com> on 2010/02/10 08:03:36 UTC

Axis2 1.5.1, JAX-WS and Rampart: client and endpoint configuration

Hello.


I built a working (?) solution and I want your opinion if this is a safe
approach, and if its semantically consistent with Axis2 internals.

I would really appreciate if you could give me a hand because my knowledge
of Axis internals is very limited.

Many will be interested in this subject especially because the examples on
the net are missing, and I didn’t managed to find anything useful on this
topic.



My requirements are:

Build J2ee web apps that expose secure web services with the latest stable
technology.



The solution I am building consists of an axis engine with the JAX-WS
services deployed right onto the web-app classes folder (next to the
Axis2Servlet), not putting any jaxws jar in servicejar.



Following [1] I managed to create an endpoint that used Rampart with JAX-WS.
By using SoapUI I managed to test it successfully. In fact, this behavior
(rampart configured on a per-axis2 engine basis) is exactly what I needed,
because all my webservices deployed there where homogenous (part of the same
application).



The next task, as other had also encountered [2], is creating a client
jax-ws application to consume the secure WS. I really wanted to stay on the
JAX-WS world because of the great JAXB and the Proxy feature, that kept my
code clean and small. Of course, I guess one can always switch to the old
JAX-RPC approach, that works perfect with Axis2, but this seemed to me as a
“downgrade”.



So I tried building a JAX-WS client to consume a secured WS.



First observation: another axis2 runtime was build in order to invoke a
jax-ws call (some modules were loaded again, time was wasted).



Second obs: the new runtime was not using the axis2.xml configuration file,
so the Rampart module was not loaded. The sent messages were not passing
through Rampart. What I needed is to somehow reuse the existing Axis2 engine
(started with the web-app) with the JAX-WS call.



As this seemed pseudo-impossible, I tried to at least reuse the
org.apache.axis2.context.ConfigurationContext from the running engine.

In order to get a grip of that context, I created a module that stored this
context for later use in *a static field **CONFIG_CONTEXT_REF*.



After deep searches, I found
org.apache.axis2.jaxws.ClientConfigurationFactory that had an factory method



*public* *static* ClientConfigurationFactory newInstance() {

*return* (ClientConfigurationFactory)MetadataFactoryRegistry.*getFactory*
(ClientConfigurationFactory.*class*);

   }

That can be customized (through
org.apache.axis2.metadata.registry.MetadataFactoryRegistry)
to return ANOTHER IMPLEMENTATION, by means of a particular configuration
file placed at

WEB-INF/classes/META-INF/services/org.apache.axis2.metadata.registry.MetadataFactoryRegistry





With the contents of



org.apache.axis2.jaxws.ClientConfigurationFactory|com.sample.CustomClientConfigurationFactory



So what I did is implement a



*public* *class* CustomClientConfigurationFactory
*extends*org.apache.axis2.jaxws.ClientConfigurationFactory {

      @Override

      *public* *synchronized* ConfigurationContext
getClientConfigurationContext() {

            *if* (MyModule.*CONFIG_CONTEXT_REF*!=*null*) {

                  *return* MyModule.*CONFIG_CONTEXT_REF*;

            } *else* {

                  *return* *super*.getClientConfigurationContext();

            }

      }

}





That returned the stored config context from the module.



The strange thing is that when I deployed this solution, I noticed that no
additional Axis engine was created anymore, and the Rampart module did his
job, securing out and in flow.







[1]
http://markmail.org/message/dkwjvskrh3gysvnw?q=list#query:list+page:1+mid:aioxif5ayfhwagnz+state:results

[2]
http://markmail.org/message/dkwjvskrh3gysvnw?q=list#query:list+page:1+mid:t7cpqqdc7pbcstol+state:results