Can you try the current version of CXF, 2.7.5? Gary
On Jun 14, 2013, at 5:17, 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(); > } > > } > > }
