Hi Daniel,
Thanks, it works now :)
with just the following modifications:
String endpoint = "
http://amxbpm:8080/amxbpm/WorkListService";
int timeout = 60;
String username = "tibco-admin";
final String password = "secret";
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(WorkListService.class);
factory.setAddress(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();
Regards,
Thomas.
On Fri, Jun 14, 2013 at 2:04 PM, Thomas Manson
<[email protected]>wrote:
> Hi Daniel,
>
> thanks for the help, I'll change this, any pointer to some sample or
> documentation ?
>
> Do I really need to specify a wsdl location, even if the client has been
> already generated ?
>
> I don't know if you remember, but for the 2.6.1-SNAPSHOT you did
> implement the validate none option to help for the client generation.
> So the client generation is not easy. I just wonder if it will try to
> autogenerate the client if I specify the wsdl location ?
>
> Regards,
> Thomas.
>
>
>
>
>
> On Fri, Jun 14, 2013 at 1:50 PM, Daniel Kulp <[email protected]> wrote:
>
>>
>>
>> > ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
>> > factory.setServiceClass(WorkListService.class);
>> > factory.setAddress(endpoint);
>> > factory.setServiceName(new QName("http://api.brm.n2.tibco.com
>> > ","WorkListService_EP"));
>> > WorkListService workListService = (WorkListService)
>> > factory.create();
>> >
>> > Client client = ClientProxy.getClient(workListService);
>>
>>
>> You are using the simple frontend, not the jaxws frontend. Thus, any of
>> the things like the "action" defined in the annotations would not be picked
>> up. You are also not setting the wsdl location, thus, it cannot read them
>> from the wsdl. Thus, the empty action.
>>
>> I'd suggest setting the wsdlLocation as well as flipping to using the
>> JaxWsProxyFactoryBean instead.
>>
>> Dan
>>
>>
>>
>> On Jun 14, 2013, at 5:16 AM, Thomas Manson <[email protected]>
>> wrote:
>>
>> > Hi,
>> >
>> > I've generated my WSDL client with CXF 2.7.0 (from 2.7.1 I get a NPE at
>> > generation time, didn't find a workaround).
>> >
>> > When I use the client I get a NPE on the server side, while with SOAPUI
>> > it's ok.
>> >
>> > I used TCPMon to compare SOAPUI and CXF soap request and I can see that
>> > CXF client do not send the SOAPaction.
>> >
>> >
>> > Questions :
>> >
>> > - What should I do to have CXF client send the SAOPAction ?
>> > - SAOPUI uses UsernameToken-9, CXF uses UsernameToken-1. I didn't
>> find a
>> > way to use the-9 version. what's the difference ?
>> > - SAOPUI add timestamp and nonce something... How can I do the same
>> with
>> > CXF ? Is it necessary ?
>> >
>> >
>> >
>> >
>> > CXF Request :
>> >
>> > <!--
>> >
>> > POST /*amxbpm*/WorkListService HTTP/1.1
>> >
>> > Content-Type: text/*xml*; *charset*=UTF-8
>> >
>> > Accept: */*
>> >
>> > SOAPAction: ""
>> >
>> > User-Agent: *Apache* CXF 2.7.5
>> >
>> > Cache-Control: no-cache
>> >
>> > *Pragma*: no-cache
>> >
>> > Host: xivertbid05.ermont.infra.sncf.fr:8888
>> >
>> > Connection: keep-alive
>> >
>> > Content-Length: 1090
>> >
>> > -->
>> >
>> > <soap:Envelope xmlns:soap=*"http://schemas.xmlsoap.org/soap/envelope/
>> "*>
>> >
>> > <SOAP-ENV:Header xmlns:SOAP-ENV=*"
>> > http://schemas.xmlsoap.org/soap/envelope/"*>
>> >
>> > <wsse:Security
>> >
>> > xmlns:wsse=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>> > "*
>> >
>> > xmlns:wsu=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
>> > "*
>> >
>> > soap:mustUnderstand=*"1"*>
>> >
>> > <wsse:UsernameToken wsu:Id=*"UsernameToken-1"*>
>> >
>> > <wsse:Username>*tibco*-*admin*</wsse:Username>
>> >
>> > <wsse:Password
>> >
>> > Type=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText
>> > "*>secret</wsse:Password>
>> >
>> > </wsse:UsernameToken>
>> >
>> > </wsse:Security>
>> >
>> > </SOAP-ENV:Header>
>> >
>> > <soap:Body>
>> >
>> > <ns1:getWorkListItems xmlns:ns1=*"
>> http://api.brm.n2.tibco.com"*
>> >>
>> >
>> > <ns1:getWorkListItems xmlns=*""*
>> >
>> > xmlns:ns3=*"
>> http://exception.api.brm.n2.tibco.com
>> > "* xmlns:ns4=*"http://exception.api.common.n2.tibco.com"*
>> >
>> > getTotalCount=*"true"* numberOfItems=*"10"*
>> > startPosition=*"0"*>
>> >
>> > <entityID entity-type=*"RESOURCE"* guid=*
>> > "tibco-admin"*
>> >
>> > model-version=*"-1"* />
>> >
>> > <orderFilterCriteria />
>> >
>> > </ns1:getWorkListItems>
>> >
>> > </ns1:getWorkListItems>
>> >
>> > </soap:Body>
>> >
>> > </soap:Envelope>
>> >
>> >
>> > SOAPUI Request
>> >
>> > <!--
>> >
>> > POST /amxbpm/WorkListService HTTP/1.1
>> >
>> > Accept-Encoding: gzip,deflate
>> >
>> > Content-Type: text/xml;charset=UTF-8
>> >
>> > SOAPAction: "getWorkListItems"
>> >
>> > Content-Length: 1110
>> >
>> > Host: xivertbid05.ermont.infra.sncf.fr:8888
>> >
>> > Connection: Keep-Alive
>> >
>> > User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
>> >
>> > -->
>> >
>> >
>> >
>> > <soapenv:Envelope xmlns:api=*"http://api.brm.n2.tibco.com"*
>> >
>> > xmlns:soapenv=*"http://schemas.xmlsoap.org/soap/envelope/"*>
>> >
>> > <soapenv:Header>
>> >
>> > <wsse:Security
>> >
>> > xmlns:wsse=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>> > "*
>> >
>> > xmlns:wsu=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
>> > "*>
>> >
>> > <wsse:UsernameToken wsu:Id=*"UsernameToken-9"*>
>> >
>> > <wsse:Username>tibco-admin</wsse:Username>
>> >
>> > <wsse:Password
>> >
>> > Type=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText
>> > "*>secret</wsse:Password>
>> >
>> > <wsse:Nonce
>> >
>> > EncodingType=*"
>> >
>> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary
>> > "*>wATZQZmZIUEMuYWA8YrN1g==</wsse:Nonce>
>> >
>> > <wsu:Created>2013-06-14T08:36:06.565Z</
>> > wsu:Created>
>> >
>> > </wsse:UsernameToken>
>> >
>> > </wsse:Security>
>> >
>> > </soapenv:Header>
>> >
>> > <soapenv:Body>
>> >
>> > <api:getWorkListItems getTotalCount=*"true"*
>> >
>> > numberOfItems=*"10"* startPosition=*"0"*>
>> >
>> > <entityID entity-type=*"RESOURCE"*
>> guid=*"tibco-admin"*
>> >
>> > model-version=*"-1"*>
>> >
>> >
>> >
>> > </entityID>
>> >
>> >
>> >
>> > </api:getWorkListItems>
>> >
>> > </soapenv:Body>
>> >
>> > </soapenv:Envelope>
>> >
>> > Java Code :
>> >
>> > package com.test.webService;
>> >
>> >
>> > import java.util.List;
>> >
>> > 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;
>> > import java.io.IOException;
>> > import java.util.HashMap;
>> > import java.util.Map;
>> >
>> > import javax.security.auth.callback.Callback;
>> > import javax.security.auth.callback.CallbackHandler;
>> > import javax.security.auth.callback.UnsupportedCallbackException;
>> > import javax.xml.namespace.QName;
>> >
>> > import org.apache.cxf.endpoint.Client;
>> > import org.apache.cxf.frontend.ClientProxy;
>> > import org.apache.cxf.frontend.ClientProxyFactoryBean;
>> > import org.apache.cxf.transport.http.HTTPConduit;
>> > import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
>> > import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
>> > import org.apache.ws.security.WSConstants;
>> > import org.apache.ws.security.WSPasswordCallback;
>> > import org.apache.ws.security.handler.WSHandlerConstants;
>> > import org.springframework.beans.factory.InitializingBean;
>> >
>> >
>> > public class ArticWorkListService implements InitializingBean
>> > {
>> > private WorkListService workListService = null;
>> >
>> > public ArticWorkListService()
>> > {
>> >
>> > this.workListService = ArticWorkListService.create();
>> > }
>> >
>> > public static WorkListService create()
>> > {
>> >
>> > String endpoint = "
>> http://localhost:8888/amxbpm/WorkListService
>> > ";
>> > int timeout = 60;
>> > String username = "tibco-admin";
>> > final String password = "secret";
>> >
>> >
>> > ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
>> > factory.setServiceClass(WorkListService.class);
>> > factory.setAddress(endpoint);
>> > factory.setServiceName(new QName("http://api.brm.n2.tibco.com
>> > ","WorkListService_EP"));
>> > 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,username);
>> > properties.put(WSHandlerConstants.PASSWORD_TYPE,
>> > WSConstants.PW_TEXT );//"PasswordDigest"
>> > properties.put(WSHandlerConstants.PW_CALLBACK_REF,new
>> > CallbackHandler()
>> > {
>> > public void handle(Callback[] callbacks) throws
>> > IOException,UnsupportedCallbackException
>> > {
>> > WSPasswordCallback pc = (WSPasswordCallback)
>> callbacks[0];
>> > pc.setPassword(password);
>> > }
>> > });
>> >
>> > client.getOutInterceptors().add(new
>> > WSS4JOutInterceptor(properties));
>> >
>> > HTTPConduit conduit = (HTTPConduit) client.getConduit();
>> >
>> > long timeoutMillis = timeout * 1000;
>> >
>> > HTTPClientPolicy policy = new HTTPClientPolicy();
>> > policy.setConnectionTimeout(timeoutMillis);
>> > policy.setReceiveTimeout(timeoutMillis);
>> >
>> > conduit.setClient(policy);
>> >
>> > return workListService;
>> > }
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > public String[] getWorklistItemsIds()
>> > {
>> > String[] ids = null;
>> >
>> > XmlModelEntityId entityId = new XmlModelEntityId();
>> > entityId.setGuid("tibco-admin");
>> > entityId.setEntityType(OrganisationalEntityType.RESOURCE);
>> > entityId.setModelVersion(-1);
>> >
>> >
>> >
>> > GetWorkListItems getWorkListItems = new GetWorkListItems( );
>> >
>> > getWorkListItems.setGetTotalCount(true);
>> > getWorkListItems.setEntityID(entityId);
>> > getWorkListItems.setStartPosition(0);
>> > getWorkListItems.setNumberOfItems(10l);
>> > getWorkListItems.setOrderFilterCriteria(new
>> OrderFilterCriteria());
>> >
>> >
>> >
>> > GetWorkListItemsResponse getWorkListItemsResponse = null;
>> >
>> > try
>> > {
>> > getWorkListItemsResponse =
>> > this.workListService.getWorkListItems(getWorkListItems);
>> > }
>> > catch(Exception e)
>> > {
>> > e.printStackTrace();
>> > }
>> >
>> > if(getWorkListItemsResponse == null)
>> > {
>> > return new String[]{"null results"};
>> > }
>> >
>> > List<WorkItem> workitems =
>> getWorkListItemsResponse.getWorkItems();
>> >
>> > ids = new String[workitems.size()];
>> > int i = 0;
>> > for (WorkItem workItem : workitems)
>> > {
>> > ids[i++] =
>> > workItem.getHeader().getItemContext().getActivityID()+"-" +
>> >
>> > workItem.getHeader().getItemContext().getActivityName()+"-" +
>> >
>> > workItem.getHeader().getItemContext().getAppID()+"-" +
>> >
>> > workItem.getHeader().getItemContext().getAppInstance()+"-" +
>> >
>> > workItem.getHeader().getItemContext().getAppInstanceDescription()+"-" +
>> >
>> > workItem.getHeader().getItemContext().getAppName()+"-" +
>> > workItem.getId().getId();
>> > }
>> > return ids;
>> > }
>> >
>> > @Override
>> > public void afterPropertiesSet() throws Exception
>> > {
>> > try
>> > {
>> > String [] ids = this.getWorklistItemsIds();
>> >
>> > for (String string : ids) {
>> > System.err.println(string);
>> > }
>> >
>> > }
>> > catch(Exception e)
>> > {
>> > e.printStackTrace();
>> > }
>> >
>> > }
>> >
>> > }
>>
>> --
>> Daniel Kulp
>> [email protected] - http://dankulp.com/blog
>> Talend Community Coder - http://coders.talend.com
>>
>>
>