Guillaume,
Sorry for the late reply, I hadn't noticed your answer because it was
filtered in my axis2 folder which I don't read every day because of the
high volume of emails.
See my comments below.
Guillaume Nodet wrote:
* the soap envelope should not be sent on the jbi bus: one of the
problem is when using rpc. the jbi spec defines a wrapper schema for
wsdl 1.1 parts, but ...
Yep, no SOAP envelope on the JBI bus.
* soap headers must be sent in some form on the bus so that the target
components may be able to process them we must use specify a property to
put a map containing those headers on the message, and eventually a
common format
- use "javax.jbi.protocol.headers" (defined by the spec) for a
Map<String,String> containing protocol headers (http / jms for ex.)
- use "javax.jbi.soap.headers" (not defined by the spec) for a
Map<QName,Element> containing soap headers
Ok, good idea. I will follow these guidelines.
* use of soap:mustUnderstand on headers: can we allow the target
component to process soap headers ? if yes, we must supply a
place-holder to say which headers were successfully processed
I'm not sure if you're talking about the BC or the ultimate recipient of
the message.
My understanding is the BC does not have to interpret the mustUnderstand
attribute because it does not actually process the message. As for the
ultimate recipient, it MUST send back a fault if it doesn't understand
the header.
http://www.w3.org/TR/2003/REC-soap12-part1-20030624/#muprocessing
Now, if the originating component wants to pass out-of-band information
to the BC, I would use specific properties on the JBI message, such as a
Map<String,String> containing properties specific to the BC.
* use of ws-addressing : how will ws-addressing be engaged ? how will
these informations be used ? For example, if a replyTo header is given,
will this information apply at the BC side, or the target endpoint side
? I think I may have missed something but I do not really understand
how this may be mapped the the jbi exchanges meps. I mean if such
information is to be applied on a Service Engine, it may conflicts with
the JBI spec: an in-out exchange MUST be routed back to the consumer,
else there will be lots of problems. Another point I do not really
understand, but maybe the someone will be able to help me: a url is
mapped to a service so if I send a message on a given url specifying a
wsa:To endpoint, it seems that it will become inconsistent: the request
will be routed to another service :( I 'd rather have a non-mapped url
which could be used to send requests containing wsa informations....
I agree there seems to a conflict here between JBI and WSA but I don't
know what is the solution. Maybe something to submit to the JBI spec
committee?
For the use-cases I'm currently considering, the WSA information could
be handled by the BC and therefore be abstracted from the consumer in
the form of a javax.jbi.servicedesc.ServiceEndpoint.
* use of the wsdl : JBI spec has been written with WSDL 2 in mind, which
means that RPC style is not really supported. I'm not a soap expert,
but lots of binding informations are geared toward the unmarshalling
layer and I do not see how you will create these informations. But once
again, I may miss something.
Good point. I was initially assuming that internal services exposed
through the BC would use document-literal binding. I guess rpc-literal
would also be possible. As you point out, RPC encoding would be much
more complex to support but, thankfully it's going out of style! (pun
intended)
Another point is the use of a HTTP GET to
retrieve the wsdl. I think this a great feature, but i would like to
have something that could apply on the whole JBI bus : maybe using a
UDDI registry where WSDL would be automatically published by ServiceMix,
or have a web console that would list all endpoints / wsdls. I am not
sure that this should be done specifically for the Axis2 BC. Moreover,
these would not be accessible for other transports such as JMS.
Yes, the BC should support for HTTP GET to retrieve the WSDL; I believe
the basic building blocks are already there in Axis2 and there's also a
console work-in-progress that will allow browsing deployed services.
As for publishing to UDDI, I don't know if there's anything in the works
to support this with Axis2. I would make sense to have UDDI publishing
as a service on the JBI bus, although I have never seen a service with
JMS binding published on UDDI. Do people on this list actually intend
to do that?
* i was wondering if we could allow automatic binding of internal
endpoints. Such binding components may not require any information at
all (in addition to the JBI endpoint to proxy), so that could be done
automatically or maybe without any real deployment. I know that this
somewhat violate the JBI spec, but this is for ease of use ...
That would certainly be an interesting feature for development, although
I'm not so sure about the value of this in an industrial application
since most of the time you'll want to define the endpoint, processing
pipeline and/or quality of service aspects of the service (e.g. security).
Btw, a good shared repository could be the sandbox at
https://svn.apache.org/repos/asf/incubator/servicemix/trunk/sandbox/ :)
Noted! I'll come back to you when I have rudimentary code.
Thanks for your input!
alex