Hi Aswin
My comments are in the mail.
aswin.nair wrote:
Hello Willem,
willem.jiang wrote:
After I went through your mail , I think you are already starting the
servlet transport for CXF
by loading the bus with the CXF Servlet transport.
Yes I had the servlet transport working after I changed the service name of
the Camel CXF component from cfx to camelcfx. I think we can configure the
endpoints using the camel configuration for that, but if we need to import
the default CXF configurations we may have the conflict.
[Willem] I got that , since "cxf" is used for the CXF bus instance in
the Spring context ,we need to resolve
the conflict of cxf and camel-cxf component.
willem.jiang wrote:
To be honestly , I do not write any test code for the WebServiceProvider
in camel-cxf component.
So you may meet some trouble when you start up the WebServiceProvider
in camel context,
and patches are welcomed :)
Sure.
willem.jiang wrote:
1. Starting the CXF endpoint by call the JAXWS API (not by starting
camel context in spring)
2. Then starting the camel context in your Provider implement code (you
could start the camel
context here), and routing the message to various processors
We already have a similar thing, but I think the approach like what you have
for the WebService SEI would be really nice as the routes would be more
descriptive.
[Willem] Can you show me the SEI that you have in your project?
camel-cxf consumer component pass the message to the router in three
different
data formate.
They are PAYLOAD, MESSAGE, POJO
You can find the more information by reading the comments in the
DataFormat.java[1]
[1]https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DataFormat.java
Now I am working on the refactoring work CAMEL-312 [2] , and if you have any
requirement please free to add comment on the JIRA
[2]https://issues.apache.org/activemq/browse/CAMEL-312
willem.jiang wrote:
Here are my answers for your questions in the mail
1) For the SEI
In camel-cxf component , we mainly use SEI to look for the type class
information for XML message
If you just use the WebServiceProvider , you just need to implement an
invoke API in your implement
class. The business function could let invoke method to deal with.
Okay. This was the stuff confusing me and now I got it. So the SEI method
would not be invoked (by default) by Camel but instead be forwarded to the
route. I think the same could be done for the WebServiceProvider SEIs also
with some minor modifications to Camel CXF classes.
[Willem] I think we need to make the SEI more clear.
It just is an interface and CXF will delegate to the SEI implementor
when it received a SOAP request.
For camel-cxf component, the CXF endpoint consumer will delegate the
request to the camel router
processors.
For the WebServcieProvider , the SEI just have one invoke method and we
skip the the XML
unmarshal and marshal processing in CXF. In this case we do not need to
use the type classes to
do the data bind work.
willem.jiang wrote:
2) For the Serlvet transport.
Since CXF will load the jetty engine to start up the http listener by
default, you need to load the bus
with CXF serlvet transport, you can went thought the CXF wiki[1] for
more information.
Now, you already did it by letting the Spring configuration context
import the
classpath:META-INF/cxf/cxf-servlet.xml
[1] http://cwiki.apache.org/CXF20DOC/index.html
Yes, this would work, but we have to change the service name of the CFX
component to be something other than "cfx". Alternatively I think we can
create a new cfx-configuration file with different names for the default bus
and referring that like following
<cxf:cxfEndpoint id="SimpleServiceEndpoint"
serviceClass="org.aswin.services.SimpleServicesProvider"
address="/SimpleService"
wsdlURL="WEB-INF/wsdl/SimpleService.wsdl"
endpointName="s:SimpleWebServicePort"
serviceName="s:SimpleWebService"
xmlns:s="http://services.aswin.org/soap"
bus="newbus" >
</cxf:cxfEndpoint>
Please correct me if I wrong in any of these. I would try making changes to
the Camel CXF classes if you think it would be a good thing to have.
[Willem]
Setting the cxfEndpoint bus with another bus instance is a way to do it
. Because there are lots of CXF
component which injected into the "cxf" bus , so it is not easy way to
do it.
Thanks
Aswin
Willem.