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.








Reply via email to