The configuration looks ok, but it looks like there is no security policy,
and hence no security header is added to the request? There needs to be
either a security policy specified in the WSDL, or alternatively you can
reference one in your jaxws:client configuration. If you need UsernameToken
I suggest looking at one of the policies in the tests here:

http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/ut/DoubleItUt.wsdl?view=markup

Or for SAML:

http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl?view=markup

Colm.


On Wed, Oct 2, 2013 at 12:27 PM, Thomas Manson
<[email protected]>wrote:

> I forgot to include the webservice2.xml file :
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>   xmlns:jaxws="http://cxf.apache.org/jaxws";
>
>   xmlns:cxf="http://cxf.apache.org/core";
>   xmlns:p="http://cxf.apache.org/policy";
>
>   xsi:schemaLocation="
>       http://www.springframework.org/schema/beans
>       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>       http://cxf.apache.org/jaxws
>       http://cxf.apache.org/schemas/jaxws.xsd
>       http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
>       ">
>
>
>
>     <cxf:bus>
>         <cxf:features>
>             <p:policies/>
>             <cxf:logging/>
>         </cxf:features>
>     </cxf:bus>
>
>
>    <jaxws:client
>               id="WorkListServiceProxyFactory"
>             name="{http://services.brm.n2.tibco.com}WorkListService_EP";
>     serviceClass="com.tibco.n2.brm.services.WorkListService"
>          address="http://192.168.2.212:8080/amxbpm/WorkListService";>
>
>      <jaxws:properties>
>         <entry key="ws-security.callback-handler"
>
>  
> value="com.mansonthomas.amxbpm.customwebapp.services.amxbpm.security.PasswordCallbackHandler"
> />
>       </jaxws:properties>
>   </jaxws:client>
>
> </beans>
>
>
> On Wed, Oct 2, 2013 at 12:37 PM, Thomas Manson <[email protected]
> > wrote:
>
>> Hi Colm,
>>
>>   I can't make it work while I'm exactly in the configuration you're
>> suggesting (and that is in the example you gave me) and I don't get what I
>> miss :
>>
>> So in my spring bean, I initialize as suggested the WebService :
>>
>>
>>
>> ###################################################################################
>> public WorkListServiceImpl2( ContextService contextService) throws
>> Exception
>> {
>>   this.contextService = contextService;
>>
>>   SpringBusFactory bf = new SpringBusFactory();
>>   URL busFile =
>> this.contextService.getResource("/WEB-INF/spring/webservices2.xml");
>>
>>   Bus bus = bf.createBus(busFile.toString());
>>   SpringBusFactory.setDefaultBus(bus);
>>   SpringBusFactory.setThreadDefaultBus(bus);
>>
>>   URL     wsdl      = this.contextService.getResource("/wsdl/brm.wsdl");
>>
>>   Service service   = Service.create(wsdl, new QName("
>> http://services.brm.n2.tibco.com","WorkListService";));
>>   QName   portQName = new QName("http://services.brm.n2.tibco.com";,
>> "WorkListService_EP");
>>
>>   this.workListService = service.getPort(portQName,
>> WorkListService.class);
>>
>> }
>>
>> ###################################################################################
>>
>> I use afterPropertySet() of Spring to call the webservice right after
>> Spring init.
>>
>>
>> ###################################################################################
>> public List<WorkItemFwk> getWorkListItems(String username,
>> WorkListItemQuery workListItemQuery)
>> {
>> //... init this object : getWorkListItems
>> try
>> {
>>
>> ((BindingProvider)this.workListService).getRequestContext().put("thread.local.request.context",
>> "true");
>>
>> ((BindingProvider)this.workListService).getRequestContext().put(SecurityConstants.USERNAME,
>> username);
>>
>>   getWorkListItemsResponse =
>> this.workListService.getWorkListItems(getWorkListItems);
>> }
>> catch(Exception e)
>> {
>>   logger.error("Error while getting worklistItems for
>> "+workListItemQuery.toString(),e);
>> }
>>
>> ###################################################################################
>>
>> And yet there's no SOAP header set in the request:
>>
>>
>>  oct. 02, 2013 12:28:11 PM
>> org.apache.cxf.services.WorkListService.WorkListService_EP.WorkListService
>> INFO: Outbound Message
>> ---------------------------
>> ID: 1
>> Address: http://192.168.2.212:8080/amxbpm/WorkListService
>> Encoding: UTF-8
>> Http-Method: POST
>> Content-Type: text/xml
>> Headers: {Accept=[*/*], SOAPAction=["getWorkListItems"]}
>> Payload: <soap:Envelope xmlns:soap="
>> http://schemas.xmlsoap.org/soap/envelope/";><soap:Body><ns2:getWorkListItems
>> xmlns:ns2="http://api.brm.n2.tibco.com"; xmlns:ns3="
>> http://exception.api.brm.n2.tibco.com"; xmlns:ns4="
>> http://exception.api.common.n2.tibco.com"; xmlns:ns5="
>> http://www.tibco.com/XPD/ScriptDescriptor/"; xmlns:ns6="
>> http://exception.api.de.n2.tibco.com"; startPosition="0"
>> numberOfItems="10" getTotalCount="true"><entityID entity-type="RESOURCE"
>> guid="tibco-admin"
>> model-version="-1"/><orderFilterCriteria/></ns2:getWorkListItems></soap:Body></soap:Envelope>
>> --------------------------------------
>>
>> So I get the following expection :
>>
>> javax.xml.ws.soap.SOAPFaultException: Authentication Failed.
>> AuthNSAML20Principal set in Subject is null or empty.
>>
>>
>> oct. 02, 2013 12:28:11 PM
>> org.apache.cxf.services.WorkListService.WorkListService_EP.WorkListService
>> INFO: Inbound Message
>> ----------------------------
>> ID: 1
>> Response-Code: 500
>> Encoding: UTF-8
>> Content-Type: text/xml; charset=utf-8
>> Headers: {Content-Length=[605], content-type=[text/xml; charset=utf-8],
>> Date=[Wed, 02 Oct 2013 10:27:43 GMT], Expires=[Thu, 01 Jan 1970 00:00:00
>> GMT],
>> Set-Cookie=[JSESSIONID=1houdu4luwh4caof40jy2d8x6;Path=/amxbpm;HttpOnly]}
>> Payload: <?xml version="1.0" encoding="UTF-8"?>
>> <SOAP-ENV:Envelope xmlns:SOAP-ENV="
>> http://schemas.xmlsoap.org/soap/envelope/";><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Authentication
>> Failed. AuthNSAML20Principal set in Subject is null or
>> empty.</faultstring><faultactor>DefaultRole</faultactor><detail><tibco:myFaultDetail
>> xmlns:tibco="http://tibcouri/";>com.tibco.amf.spline.api.context.SplineMessagingException:
>> Authentication Failed. AuthNSAML20Principal set in Subject is null or empty.
>>
>> </tibco:myFaultDetail></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
>> --------------------------------------
>>
>>
>>
>>
>> Any idea before I jump through the window ? ;)
>>
>> Thanks,
>> Thomas.
>>
>>
>>
>>
>> On Thu, Sep 26, 2013 at 4:36 PM, Thomas Manson <
>> [email protected]> wrote:
>>
>>> Hi Colm,
>>>
>>> I know I'm probably exasperating you with my dumb questions, but I
>>> really need help...
>>>
>>>
>>>   So reading the FAQ, I understand that we're thread safe if we use :
>>>
>>>   ((BindingProvider)proxy).getRequestContext().put(
>>> "thread.local.request.context", "true");
>>>
>>> before calling
>>>
>>> ((BindingProvider)*this*.workListService
>>> ).getRequestContext().put(SecurityConstants.*USERNAME*, "Alice");
>>>
>>> Right ?
>>>
>>>
>>> With the JaxWSClient,  I've tried to use
>>>
>>>
>>> ((BindingProvider)utPort).getRequestContext().put(SecurityConstants.USERNAME,
>>> "Alice");
>>>
>>> and it didn't had any effect... (I was making subsequent call, and
>>> changing the username)
>>>
>>> The web service response was the same for the two user, while one should
>>> have replied an empty response.
>>>
>>> *    try
>>> *    {
>>>       ((BindingProvider)*this*.workListService
>>> ).getRequestContext().put(SecurityConstants.*USERNAME*, username);
>>>       getWorkListItemsResponse = *this*.workListService
>>> .getWorkListItems(getWorkListItems);
>>>     }
>>>     *catch*(Exception e)
>>>     {
>>>       *logger*.error("Error while getting worklistItems for "
>>> +workListItemQuery.toString());
>>>     }
>>>
>>> Did I miss somehting ?
>>>
>>>
>>>
>>> One other thing I did understand in the meantime, is that, by using
>>>
>>>     JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>>>     factory.setServiceClass(WorkListService.class);
>>>     factory.setAddress(this.endpoint);
>>>     //
>>> factory.setWsdlLocation("D:/ARTIC/SOURCE/artic/trunk/webapp/src/main/webapp/WSDL/brm.wsdl");
>>>     factory.setServiceName(new QName("http://services.brm.n2.tibco.com";,
>>> "WorkListService"));
>>>
>>> Or
>>>
>>>     SpringBusFactory bf = new SpringBusFactory();
>>>     URL busFile = WorkListServiceImpl2.class.getResource("client.xml");
>>>
>>>      Bus bus = bf.createBus(busFile.toString());
>>>     SpringBusFactory.setDefaultBus(bus);
>>>     SpringBusFactory.setThreadDefaultBus(bus);
>>>
>>>     URL wsdl = WorkListServiceImpl2.class.getResource(
>>> "/Users/tmanson/Dropbox/crf/AMXBPM-2.1-WS-Client/src/main/resources/brm.wsdl"
>>> );
>>>     Service service = Service.create(wsdl, new QName("
>>> http://api.brm.n2.tibco.com";, "WorkListService"));
>>>     QName portQName = new QName("http://services.brm.n2.tibco.com";,
>>> "WorkListService_EP");
>>>     this.workListService =
>>>             service.getPort(portQName, WorkListService.class);
>>>
>>> etc...
>>>
>>> we ask CXF to generate on the fly the WS Client, is it correct?
>>>
>>>
>>> Now I've already generated a client (with CXF/Ant), which I want to
>>> invoke instead with this code  :
>>>
>>> WorkListService_Service proxy = *new* WorkListService_Service(*new* URL(
>>> "http://localhost:8080/amxbpm-web/wsdl/brm.wsdl";),
>>>         *new* QName("http://services.brm.n2.tibco.com","WorkListService";
>>> ));
>>> *this*.workListService = proxy.getPort( *new* QName("
>>> http://services.brm.n2.tibco.com";, "WorkListService_EP"),
>>> WorkListService.*class*);
>>>
>>>  I wonder how it can be used in conjonction with this code, and How
>>> should I handle the authentication part...:
>>>
>>> SpringBusFactory bf = *new* SpringBusFactory();
>>> URL busFile = WorkListServiceImpl2.*class*.getResource("client.xml");
>>> Bus bus = bf.createBus(busFile.toString());
>>> SpringBusFactory.*setDefaultBus*(bus);
>>> SpringBusFactory.*setThreadDefaultBus*(bus);
>>>
>>>
>>> I still dont get what file should I put instead of client.xml as I'm
>>> already in a spring context, should I specify the file where I define my
>>> bean already ?
>>> it's quite confusing...
>>>
>>>
>>> Thomas.
>>>
>>>
>>> On Wed, Sep 25, 2013 at 3:36 PM, Colm O hEigeartaigh <
>>> [email protected]> wrote:
>>>
>>>> > Is it thread safe ?
>>>>
>>>> http://cxf.apache.org/faq.html#FAQ-AreJAXWSclientproxiesthreadsafe%3F
>>>>
>>>> All you need is a JAX-WS client proxy, how you obtain one or set up your
>>>> project is up to you...
>>>>
>>>> Colm.
>>>>
>>>>
>>>> On Tue, Sep 24, 2013 at 2:07 PM, Thomas Manson
>>>> <[email protected]>wrote:
>>>>
>>>> > Hi Colm,
>>>> >
>>>> >   I'm starting to understand that it's another way to configure the
>>>> client.
>>>> >
>>>> >   I've two questions :
>>>> >
>>>> >    - Is it thread safe ?
>>>> >    I guess that it is as I see that the ServiceBus specify a Thread.
>>>> >    In a J2EE context, should I specify something else than
>>>> >    SpringBusFactory.setThreadDefaultBus(bus); ?
>>>> >
>>>> >
>>>> >    - I'm a bit puzzled by the configuration:
>>>> >
>>>> >
>>>> > SpringBusFactory bf = new SpringBusFactory();
>>>> > URL busFile =
>>>> UsernameTokenTest.class.getResource("client/client.xml");
>>>> >
>>>> >
>>>> > This code load a Spring configuration file, while I already have mine
>>>> +
>>>> > the client.xml configuration has some cxf:bus definition (is it the
>>>> same
>>>> > thing ? SringBusFactory & cxf:bus ?).
>>>> >
>>>> >  So I wonder I can't just use this code in an existing spring
>>>> context, How
>>>> > should I transpose this within an existing spring context?
>>>> >
>>>> >
>>>> >  How I think it would work is :
>>>> >
>>>> >
>>>> >    - Use your way to setup SpringBus and the Client
>>>> >    - Have a Spring class X that has the WS Client as dependency
>>>> >    - X implement each method of the WS(+some additional business
>>>> logic)
>>>> >    and set the username dynamically <= I still don't know how to do
>>>> this...
>>>> >
>>>> >  Is it the correct way ?
>>>> >
>>>> > Thomas.
>>>> >
>>>> > Here is my current work in progress spring file
>>>> >
>>>> > <beans xmlns="http://www.springframework.org/schema/beans";
>>>> >
>>>> >   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:cxf="
>>>> > http://cxf.apache.org/core";
>>>> >   xsi:schemaLocation="
>>>> > http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
>>>> > http://www.springframework.org/schema/beans
>>>> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd";>
>>>> >
>>>> >
>>>> >   <cxf:bus>
>>>> >     <cxf:features>
>>>> >        <cxf:logging />
>>>> >     </cxf:features>
>>>> >   </cxf:bus>
>>>> >
>>>> >
>>>> >
>>>> > <!--
>>>> >
>>>> /Users/tmanson/Dropbox/crf/AMXBPM-2.1-WS-Client/src/main/resources/de.wsdl
>>>> > -->
>>>> >   <jaxws:client
>>>> >             name="{http://services.brm.n2.tibco.com
>>>> }EntityResolverService"
>>>> >
>>>> >
>>>> wsdlLocation="/Users/tmanson/Dropbox/crf/AMXBPM-2.1-WS-Client/src/main/resources/de.wsdl"
>>>> >     serviceClass="com.tibco.n2.de.services.EntityResolverService"
>>>> >          address="
>>>> http://192.168.2.202:8080/amxbpm/EntityResolverService";
>>>> >   createdFromAPI="true">
>>>> >     <jaxws:properties>
>>>> >       <entry key="ws-security.callback-handler"
>>>> >
>>>> >
>>>>  
>>>> value="com.mansonthomas.amxbpm.customwebapp.services.amxbpm.security.PasswordCallbackHandler"
>>>> > />
>>>> >     </jaxws:properties>
>>>> >   </jaxws:client>
>>>> >
>>>> > </beans>
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > On Tue, Sep 24, 2013 at 11:41 AM, Colm O hEigeartaigh <
>>>> [email protected]
>>>> > > wrote:
>>>> >
>>>> >> Look at the last test here:
>>>> >>
>>>> >>
>>>> >>
>>>> http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/ut/UsernameTokenTest.java?view=markup
>>>> >>
>>>> >>
>>>> >>
>>>> ((BindingProvider)utPort).getRequestContext().put(SecurityConstants.USERNAME,
>>>> >> "Alice");
>>>> >>
>>>> >> Colm.
>>>> >>
>>>> >>
>>>> >> On Tue, Sep 24, 2013 at 10:33 AM, Thomas Manson
>>>> >> <[email protected]>wrote:
>>>> >>
>>>> >> > Hi Colm,
>>>> >> >
>>>> >> >   I'm back working on this subject (was on pause as I was working
>>>> for
>>>> >> other
>>>> >> > clients)
>>>> >> >
>>>> >> >   I've checked out the SVN repo you gave me, and I've looked
>>>> through the
>>>> >> > samples configurations (client.xml) and I can't find anything
>>>> >> appropriate.
>>>> >> >
>>>> >> >  In the UT (Username Token I guess), the username is always
>>>> provided in
>>>> >> the
>>>> >> > configuration file.
>>>> >> >  The saml/x509 configuration still refers to Alice.properties...
>>>> >> >
>>>> >> >
>>>> >> >   In my case, the username shouldn't appear in the configuration
>>>> files,
>>>> >> as
>>>> >> > I need to use the J2EE Principal as login, and call the webservice
>>>> to
>>>> >> > authenticate the user.
>>>> >> >
>>>> >> >   Could you point me to the right direction  ?
>>>> >> >
>>>> >> > Thomas.
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> > On Sat, Jul 13, 2013 at 1:45 AM, Thomas Manson
>>>> >> > <[email protected]>wrote:
>>>> >> >
>>>> >> > > Thanks, it will surely help a lot :)
>>>> >> > >
>>>> >> > > Thomas.
>>>> >> > >
>>>> >> > >
>>>> >> > > On Fri, Jul 12, 2013 at 6:05 PM, Colm O hEigeartaigh <
>>>> >> > [email protected]>wrote:
>>>> >> > >
>>>> >> > >> Please take a look at the tests here:
>>>> >> > >>
>>>> >> > >>
>>>> >> > >>
>>>> >> >
>>>> >>
>>>> http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/systests/ws-security-examples/
>>>> >> > >>
>>>> >> > >> Colm.
>>>> >> > >>
>>>> >> > >>
>>>> >> > >> On Fri, Jul 12, 2013 at 4:22 PM, Thomas Manson
>>>> >> > >> <[email protected]>wrote:
>>>> >> > >>
>>>> >> > >> > Do you have any other pointer that this page :
>>>> >> > >> >
>>>> >> > >> > cxf.apache.org/docs/ws-securitypolicy.html
>>>> >> > >> >
>>>> >> > >> > it's way to short for me as documentation to build something
>>>> that
>>>> >> > work.
>>>> >> > >> > When I read the properties described, I feel there's a mix
>>>> between
>>>> >> > >> server
>>>> >> > >> > side properties (which I'm not interested as I'm just
>>>> implementing
>>>> >> a
>>>> >> > >> > client)... + it starts with extra properties... where are the
>>>> basic
>>>> >> > >> ones?
>>>> >> > >> >
>>>> >> > >> > what would help is a full example of the code of a client.
>>>> >> > >> >
>>>> >> > >> > I'm quite lost ;)
>>>> >> > >> >
>>>> >> > >> >
>>>> >> > >> >
>>>> >> > >> >
>>>> >> > >> > On Fri, Jul 12, 2013 at 5:09 PM, Colm O hEigeartaigh <
>>>> >> > >> [email protected]
>>>> >> > >> > >wrote:
>>>> >> > >> >
>>>> >> > >> > >
>>>> >> > >> > > If you follow the WS-SecurityPolicy approach then it will
>>>> work,
>>>> >> as
>>>> >> > >> all of
>>>> >> > >> > > the configuration is taken from the context rather than a
>>>> >> properties
>>>> >> > >> Map.
>>>> >> > >> > >
>>>> >> > >> > > Colm.
>>>> >> > >> > >
>>>> >> > >> > >
>>>> >> > >> > > On Fri, Jul 12, 2013 at 4:01 PM, Thomas Manson <
>>>> >> > >> > [email protected]
>>>> >> > >> > > > wrote:
>>>> >> > >> > >
>>>> >> > >> > >>  I already does what you say as follow, but it mean one
>>>> >> instance of
>>>> >> > >> the
>>>> >> > >> > >> client per user connected.
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >> I've search quite some time dans didn't find a way to set
>>>> >> something
>>>> >> > >> like
>>>> >> > >> > >> the password callback handler.
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>  JaxWsProxyFactoryBean factory = new
>>>> JaxWsProxyFactoryBean();
>>>> >> > >> > >>
>>>> >> > >> > >>     factory.setServiceClass(WorkListService.class);
>>>> >> > >> > >>
>>>> >> > >> > >>     factory.setAddress(this.endpoint);
>>>> >> > >> > >>
>>>> >> > >> > >>     //
>>>> >> > >> > >>
>>>> >> > >> >
>>>> >> > >>
>>>> >> >
>>>> >>
>>>> factory.setWsdlLocation("D:/ARTIC/SOURCE/artic/trunk/webapp/src/main/webapp/WSDL/brm.wsdl");
>>>> >> > >> > >>
>>>> >> > >> > >>     factory.setServiceName(new QName("
>>>> >> > >> http://services.brm.n2.tibco.com
>>>> >> > >> > ",
>>>> >> > >> > >> "WorkListService"));
>>>> >> > >> > >>
>>>> >> > >> > >>     WorkListService workListService = (WorkListService)
>>>> >> > >> > factory.create();
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>        Client client =
>>>> ClientProxy.getClient(workListService);
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>     Map<String, Object> properties = new HashMap<String,
>>>> >> Object>();
>>>> >> > >> > >>
>>>> >> > >> > >>     properties.put(WSHandlerConstants.ACTION          ,
>>>> >> > >> > >> WSHandlerConstants.USERNAME_TOKEN);
>>>> >> > >> > >>
>>>> >> > >> > >>     properties.put(WSHandlerConstants.USER            ,
>>>> >> > >> this.username);
>>>> >> > >> > >>
>>>> >> > >> > >>     properties.put(WSHandlerConstants.PASSWORD_TYPE   ,
>>>> >> > WSConstants.
>>>> >> > >> > >> PW_TEXT);// "PasswordDigest"
>>>> >> > >> > >>
>>>> >> > >> > >>     properties.put(WSHandlerConstants.PW_CALLBACK_REF ,
>>>> >> > >> > newPasswordCallbackHandler(
>>>> >> > >> > >> this.username, password, "password"));
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>     client.getOutInterceptors().add(new
>>>> >> > >> > WSS4JOutInterceptor(properties));
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >> On Fri, Jul 12, 2013 at 4:36 PM, Colm O hEigeartaigh <
>>>> >> > >> > [email protected]
>>>> >> > >> > >> > wrote:
>>>> >> > >> > >>
>>>> >> > >> > >>> ou could create a CXF interceptor that sets the username
>>>> on the
>>>> >> > fly,
>>>> >> > >> > >>> before the WSS4JOutInterceptor is called.
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >>
>>>> >> > >> > >
>>>> >> > >> > >
>>>> >> > >> > > --
>>>> >> > >> > > Colm O hEigeartaigh
>>>> >> > >> > >
>>>> >> > >> > > Talend Community Coder
>>>> >> > >> > > http://coders.talend.com
>>>> >> > >> > >
>>>> >> > >> >
>>>> >> > >>
>>>> >> > >>
>>>> >> > >>
>>>> >> > >> --
>>>> >> > >> Colm O hEigeartaigh
>>>> >> > >>
>>>> >> > >> Talend Community Coder
>>>> >> > >> http://coders.talend.com
>>>> >> > >>
>>>> >> > >
>>>> >> > >
>>>> >> >
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Colm O hEigeartaigh
>>>> >>
>>>> >> Talend Community Coder
>>>> >> http://coders.talend.com
>>>> >>
>>>> >
>>>> >
>>>>
>>>>
>>>> --
>>>> Colm O hEigeartaigh
>>>>
>>>> Talend Community Coder
>>>> http://coders.talend.com
>>>>
>>>
>>>
>>
>


-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Reply via email to