On Jun 14, 2013, at 8:04 AM, 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 ? It depends on the service. If the service has various policies (like WS-Security policies) defined in the wsdl, you will need the wsdl at runtime. If it doesn't, then you can likely get away without the wsdlLocation. Dan > > 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 >> >> -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
