If you have a WS-SecurityPolicy in operation, it will take care of adding
the correct headers, once you supply it with the correct information
(username, password, etc.). Please take a look at the ws-security-examples
systests to see how it all works.

Colm.


On Mon, Oct 14, 2013 at 10:27 PM, Thomas Manson
<[email protected]>wrote:

> Hi Colm,
>
>  I will resume work on this subject tomorrow.
>
>  So I'm in a situation where there's no soap header setted, and the spring
> configuraiton seems to be ignored (which would be quite logical as we don't
> use it in the java code, just rebuiling all ourselves.)
>
> So how can I make sure the soap header is setted in my request? How can I
> set the authentication type (username/password plain) ?
>
> Thanks,
> Thomas.
>
>
> On Mon, Oct 7, 2013 at 11:23 AM, Thomas Manson <[email protected]
> > wrote:
>
>> Hi Colm,
>>
>>  If I remove the <jaxws:client  element, it still work as before, so I
>> guess this client xml declaration is not taken into account as we're just
>> programmatically re-doing what the spring configuration does...
>>
>>  As I stated earlier, I'm already in a spring context (J2EE Spring MVC
>> application), that's why I don't understand the BusFactory need to be given
>> the spring xml file.
>>
>>  I've understood that while seeing that the endpoint was not taken into
>> account (thanks to my Virtual machine that changes of IP each time I resume
>> my mac).
>>
>>  So I'll focus to make it work programmatically first, then figure out
>> how to use the spring XML configurations files and finally try to use my
>> own generated WS Client instead of generating it on the fly.
>>
>>
>>  For now, I'm still blocked on enabling a security policy on the client
>> side programmatically.
>>  For instance, my password callback handler is not taken into account, as
>> it's not called at all.
>>
>> (the method  public void handle(Callback[] callbacks) throwsIOException, 
>> UnsupportedCallbackException  is not called)
>>
>>
>>   I programmatically specify it as follow (full code at the end of the
>> mail):
>>
>> *this*.workListService = service.getPort(portQName, WorkListService.*
>> class*);
>>
>> ((BindingProvider)*this*.workListService
>> ).getRequestContext().put(BindingProvider.*ENDPOINT_ADDRESS_PROPERTY*, "
>> http://192.168.2.213:8080/amxbpm/WorkListService";);
>>
>> //I've also tryed by just specificying a class name, but don't work
>> either.
>>
>> PasswordCallbackHandler passwordCallbackHandler = 
>> *new*PasswordCallbackHandler(
>> "secret");
>> ((BindingProvider)*this*.workListService
>> ).getRequestContext().put(SecurityConstants.*CALLBACK_HANDLER*,
>> passwordCallbackHandler);
>>
>>
>>
>>
>> In the CXF samples, it's done like this:
>>
>>   <jaxws:client name=*"{
>> http://www.example.org/contract/DoubleIt}DoubleItPlaintextPrincipalPort";
>> *
>>                   createdFromAPI=*"true"*>
>>        <jaxws:properties>
>>            <entry key=*"ws-security.callback-handler"
>> *
>>                   value=*
>> "org.apache.cxf.systest.ws.wssec10.client.UTPasswordCallback"*/>
>>        </jaxws:properties>
>>     </jaxws:client>
>>
>>
>>  So I wonder what I miss...
>>
>> Thomas.
>>
>>
>> package com.mansonthomas.amxbpm.customwebapp.services.amxbpm;
>>
>> import java.net.URL;
>> import java.util.ArrayList;
>> import java.util.List;
>>
>> import javax.xml.namespace.QName;
>> import javax.xml.transform.Source;
>> import javax.xml.ws.BindingProvider;
>> import javax.xml.ws.EndpointReference;
>> import javax.xml.ws.Service;
>> import javax.xml.ws.WebServiceFeature;
>> import javax.xml.ws.wsaddressing.W3CEndpointReference;
>> import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> import org.apache.cxf.Bus;
>> import org.apache.cxf.bus.spring.SpringBusFactory;
>> import org.apache.cxf.endpoint.Client;
>> import org.apache.cxf.ws.security.SecurityConstants;
>> import org.springframework.beans.factory.InitializingBean;
>>
>> import com.mansonthomas.amxbpm.customwebapp.model.WorkItemFwk;
>> import com.mansonthomas.amxbpm.customwebapp.model.WorkListItemQuery;
>> import
>> com.mansonthomas.amxbpm.customwebapp.services.amxbpm.context.ContextService;
>> import
>> com.mansonthomas.amxbpm.customwebapp.services.amxbpm.mapper.WorkItemMapper;
>> import
>> com.mansonthomas.amxbpm.customwebapp.services.amxbpm.security.PasswordCallbackHandler;
>> import com.tibco.n2.brm.api.GetWorkListItems;
>> import com.tibco.n2.brm.api.GetWorkListItemsResponse;
>> import com.tibco.n2.brm.api.OrderFilterCriteria;
>> import com.tibco.n2.brm.api.WorkItem;
>> import com.tibco.n2.brm.services.WorkListService;
>> import com.tibco.n2.common.organisation.api.OrganisationalEntityType;
>> import com.tibco.n2.common.organisation.api.XmlModelEntityId;
>>
>> public class WorkListServiceImpl2 implements WorkListFwkService,
>> InitializingBean
>> {
>>
>>   private static final Log           logger       =
>> LogFactory.getLog(WorkListServiceImpl2.class);
>>
>>
>>
>>   private WorkListService workListService = null;
>>   private  ContextService contextService = null;
>>
>>   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);
>>
>>
>> ((BindingProvider)this.workListService).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
>> "http://192.168.2.213:8080/amxbpm/WorkListService";);
>>
>>     PasswordCallbackHandler passwordCallbackHandler = new
>> PasswordCallbackHandler("secret");
>>
>>
>> ((BindingProvider)this.workListService).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER,
>> passwordCallbackHandler);
>>
>>
>>   }
>>
>>   public List<WorkItemFwk> getWorkListItems(String username,
>> WorkListItemQuery workListItemQuery)
>>   {
>>     XmlModelEntityId entityId = new XmlModelEntityId();
>>     entityId.setGuid(workListItemQuery.getUserGUID());
>>     entityId.setEntityType(OrganisationalEntityType.RESOURCE);
>>     entityId.setModelVersion(-1);
>>
>>     GetWorkListItems getWorkListItems = new GetWorkListItems();
>>
>>     getWorkListItems.setGetTotalCount       (true);
>>     getWorkListItems.setEntityID            (entityId);
>>     getWorkListItems.setStartPosition
>> (workListItemQuery.getStart());
>>     getWorkListItems.setNumberOfItems
>> (workListItemQuery.getNumberOfItems());
>>     getWorkListItems.setOrderFilterCriteria (new OrderFilterCriteria());
>>
>>     GetWorkListItemsResponse getWorkListItemsResponse = null;
>>
>>      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);
>>     }
>>
>>
>>
>>     if(getWorkListItemsResponse == null)
>>     {
>>       logger.error("recieve a null response while getting worklistItems
>> for "+workListItemQuery.toString());
>>       return new ArrayList<WorkItemFwk>(0);
>>     }
>>
>>     List<WorkItem>    workitems       =
>> getWorkListItemsResponse.getWorkItems();
>>     List<WorkItemFwk> workListItemFwk = new
>> ArrayList<WorkItemFwk>(workitems.size());
>>
>>
>>     int i = 0;
>>     for (WorkItem workItem : workitems)
>>     {
>>       workListItemFwk.add(WorkItemMapper.map(workItem, i++));
>>     }
>>     return workListItemFwk;
>>   }
>>
>>   @Override
>>   public void afterPropertiesSet() throws Exception
>>   {
>>
>>     WorkListItemQuery workListItemQuery = new WorkListItemQuery();
>>
>>     workListItemQuery.setStart(0l);
>>     workListItemQuery.setNumberOfItems(10l);
>>     workListItemQuery.setUsername("tibco-admin");
>>     workListItemQuery.setUserGUID("tibco-admin");
>>
>>     this.getWorkListItems("tibc-admin", workListItemQuery);
>>
>>   }
>>
>> }
>>
>>
>>
>>
>


-- 
Colm O hEigeartaigh

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

Reply via email to