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 > >
