Use of URIs
URI can be used at serveral places inside ServiceMix.
Endpoint resolution
When calling context.resolveEndpointReference(epr).
You could something like:
DocumentFragment epr = URIResolver.createWSAEPR("http://localhost:8192?http.soap=true"); ServiceEndpoint se = client.getContext().resolveEndpointReference(epr); exchange.setEndpoint(se); send(exchange);
ActivationSpec
<sm:activationSpec destinationUri="interface:http://www.foo.bar/MyInterface"> ... </sm:activationSpec>
<beans ... xmlns:my="http://servicemix.apache.org/demo/"> ... <sm:activationSpec componentName="component" service="my:service" endpoint="endpoint"> ... </sm:activationSpec> ... </beans>
Be careful with namespaces. ServiceMix maintains an endpoint registry which it uses to look up endpoints. The example above registers the corresponding endpoint with the key:
{http://servicemix.apache.org/demo/}serviceendpoint
However, an endpoint reference of
http://servicemix.apache.org/demo/service/endpoint
... will result in a different, non-matching key:
{http://servicemix.apache.org/demo}serviceendpoint
... which will ultimately cause the routing to fail.
EIP component
See servicemix-eip.
URI syntax
The ServiceMix container can parse the following URIs:
interface:qname
operation:qname[sep]name
service:qname
endpoint:qname[sep]name
QName will be represented as:
namespace[sep]name
The separator used will be:
- '/' if the namespace looks like 'http://'
- ':' if the namespace looks like 'urn:foo:bar'
Other protocols will be given to components for endpoint resolution.
These uris will be given inside an xml fragment:
<epr> <wsa:Address xmlns:wsa="http://www.w3.org/2005/08/addressing"> uri </wsa:Address> </epr>
It is up to binding components to resolve such EPR and provide an adequate ServiceEndpoint.
If used to resolve an EPR, only the endpoint: protocol can be used.
Currently, only the servicemix-http and servicemix-jms BCs are able to resolve such endpoints.
Examples
interface:urn:foo:bar:MyInterface
operation:http://foo.bar/MyInterface/MyOperation
service:http://foo.bar.org/MyService
endpoint:urn:foo:bar:MyService:MyEndpoint
http://localhost:8192/service/?http.soap=true
jms://queue/foo.bar.myqueue?jms.soap=true
Auto-creation
TODO: allow the use of URIs to expose a JBI endpoint over several transports without having to rely on creating a Service Unit for each component.
One of the neat things about using ActiveMQ is that once its up and running, you can refer to JMS endpoints (queues/topics) by name and things are auto-created for you by default. If required you can apply security access roles to this to prevent certain users creating new endpoints within a namespace.
So having a default broker with ActiveMQ installed as a component, it would be nice to just send to a new URI of the users choosing, such as
- jms://activemq/queue/FOO.BAR
and for the JBI endpoint to be auto-created (or the endpoint handled by a single endpoint for all URIs etc).
1 Comment
Anonymous
ionolsen42 Best site I see. Thanks. http://www_3_1.gmail.com/ www_3_1
http://www_3_2.gmail.com/ www_3_2
http://www_3_3.gmail.com/ www_3_3
http://www_3_4.gmail.com/ www_3_4
http://www_3_5.gmail.com/ www_3_5
http://www_3_6.gmail.com/ www_3_6
http://www_3_7.gmail.com/ www_3_7
http://www_3_8.gmail.com/ www_3_8
http://www_3_9.gmail.com/ www_3_9
http://www_3_10.gmail.com/ www_3_10
http://www_3_11.gmail.com/ www_3_11