Hi Guillaume,
I will add some supports of creating the consumer server with just WSDL
url in the MESSAGE and PAYLOAD date formate mode in CXF component.
I saw you just committed codes , you already created a server that can
consume the soap message. I'd like to fill the codes of exchanging the
messages with camel core.
Willem.
Guillaume Nodet wrote:
I'm thinking that usually, if the target endpoint is not a jaxws pojo,
we will often use an xml based content rather than marshal the data,
so that you can do content based routing, transformation, etc...
Btw, I'm working on the "soap:" component when time permits. If you
ever want to look at it and work on it, just tell ! I've just
committed a few things for that but we still need to fill the holes
with cxf related code.
On 9/29/07, Willem Jiang <[EMAIL PROTECTED]> wrote:
Hi Guillaume,
Good questions. We could face lots of situations without Service
Endpoint Interface (SEI) provided for the endpoint.
Current CXF DynmaicClientFactory[1] can create a client just use by
passing the wsdl url information into it , and use XJC to build up the
type classes for the message marshal and unmarshal .
For the Server side, I think we can do the same thing here by using
WSDL2Java to generate the SEI and type class.
So we could support both WSDL first and Code first programing mode here,
and the SEI just be a optional parameter.
[1]https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
Willem.
Guillaume Nodet wrote:
That's a bit better.
But what if your service is not implemented using jaxws ? If you have
a BPEL process rather than a pojo ? Or if your service is implemented
by multiple small services and you use a CBR using the operation name
to dispatch the request ?
Or whatever use case one can imagine...
On the consumer side, the role of CXF is to handle SOAP and WS-*
stuff. This mainly relies on the WSDL rather than on a POJO. Using
the pojo will certainly be handy if using code first approach, but we
also need to support wsdl first, and especially when there is no POJO
at all...
I see the externalEndpoint uses a wsdlURL... (relative to what ?) Can
both endpoints use only the WSDL so that the serviceClass becomes
optional ?
On 9/28/07, Willem Jiang <[EMAIL PROTECTED]> wrote:
Hi Guillaume,
Oh, I got your means.
I don't want to instantiate the Service from Spring , I just want to
pass enough endpoint information to build the CXF Service. I check the
server object code, and I know I can't set the invoker of a already
created server .
So I changed my proposal to use a customized CxfEndpointBean instead
of the already instantiate server object or client object.
Here is the changed example:
<cxf:CxfEndpointBean id= "routerPoint"
serviceClass="org.apache.cxf.service.factory.HelloService"
address="http://localhost:8000/router"
serviceName="s:XMLService"
xmlns:s="http://apache.org/hello_world_soap_http"
endpointName="s:XMLPort" />
<cxf:CxfEndpointBean id= "externalPoint"
serviceClass="org.apache.cxf.service.factory.HelloService"
address="http://localhost:8000/RealService"
wsdlURL = "wsdl/hello_world"
serviceName="s:XMLService"
xmlns:s="http://apache.org/hello_world_soap_http"
endpointName="s:XMLPort" />
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="cxf://CxfEndpointBean=routerPoint"/>
<to uri="cxf://CxfEndpointBean=externalPoint"/>
</route>
</camelContext>
I will add the ServerFactoryBean and ClientFactoryBean configuration with
CxfEndpointBean code into the cxf component. So we still instantiate the server
or the client as we always do in the CXF component .
Thanks,
Willem.
Guillaume Nodet wrote:
I'm still very concerned about the fact that we have to instanciate
the service on the server side if it is not actually used (requests
are just forwarded). Can we configure the server to just use a WSDL
instead ?
On 9/28/07, Willem Jiang <[EMAIL PROTECTED]> wrote:
Guillaume Nodet wrote:
On 9/28/07, Willem Jiang <[EMAIL PROTECTED]> wrote:
Here is an example:
...
<simple:client id="client1"
serviceClass="org.apache.cxf.service.factory.HelloService"
address="http://localhost:9000/foo2"
serviceName="s:XMLService"
xmlns:s="http://apache.org/hello_world_soap_http"
endpointName="s:XMLPort"
bindingId="http://cxf.apache.org/bindings/xformat">
</simple:client>
<simple:server id="server1"
address="http://localhost:8080/simpleWithAddress">
<simple:serviceBean>
<bean class="org.apache.cxf.service.factory.HelloServiceImpl"/>
</simple:serviceBean>
</simple:server>
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="cxf://SpringBean=server1"/>
<to uri="cxf://SpringBean=client1"/>
</route>
</camelContext>
Can you explain a bit what this route is supposed to do ?
Is this supposed to accept requests on
http://localhost:8080/simpleWithAddress
and route them to an external service on
http://localhost:9000/foo2
Yes , it is exactly working as your said.
I just omitted the address information from the endpoint URI , because
they are already in the Spring bean's configuration.
Willem.