Hi,
My comment inline
On 2010-3-19, at 上午4:31, jbgill wrote:
Hi everyone,
Here's a scenario I would like to perform if possible: I have a cxfse
service unit which exports a JBI endpoint, and I have a WAR file
webapp
containing servlets, both deployed into SMX 4 (latest snapshot build).
What I would like to do is internally call the JBI endpoint from the
war
file's servlets over the NMR, without exposing it through a binding
component. Ideally this would be through a CXF client proxy similar
to what
you can do in a cxfse su with the <cxfse:proxy ... /> injection.
Is this possible? If so, what are my options on how to do it?
No, I don't think you can simply use cxfse:proxy injection directly
from your servlet, as cxfse:proxy need
org.apache.servicemix.jbi.runtime.ComponentRegistry implementation
injection in osgi container, which is done through servicemix-cxf-se
component.
But if your servlet spring configuration can also do what we do for
servicemix-cxf-se component configuration, you might take the benefit
of using proxy directly, you also need set correct JBI transport and
bindings(jbi binding or soap binding depend on what the message
payload you want), pretty much like what we do in
CxfSeProxyFactoryBean, but honestly make all this work is not a easy
job if you are not familiar with cxf and servicmix.
Or alternatively and also more straightforward way is that you can
use nmr client api from your servlet, take a look at nmr example
shipped with the kit, the "client" part is more important for you.
Some code like
// Create the client channel
client = nmr.createChannel(); //get the nmr through osgi
service injection, for details from the spring configuration of nmr/
client bundle
// Create a reference that will be used as the target for
your exchanges
Reference ref =
nmr
.getEndpointRegistry().lookup(ServiceHelper.createMap(Endpoint.NAME,
"your cxf se endpoint name"));
// Create an exchange and send it
Exchange e = client.createExchange(Pattern.InOut);
e.setTarget(ref);
e.getIn().setBody("soap message or jbi message depend on
what you want");
client.sendSync(e);
e.setStatus(Status.Done);
client.send(e);
You can use "nmr:list" command to get the nmr Endpoint.NAME for the
cxf se endpoint you already deployed. You need take care of the
message payload yourself.
Freeman
--
View this message in context:
http://old.nabble.com/Webapp-%28WAR-file%29-invoking-internal-JBI-endpoint-tp27950842p27950842.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com