Andrei, Thanks again. Do you have any references to such implementation.
Also, any more insights to it, please. Thanks, Chandu. On Tue, Jan 7, 2014 at 4:12 PM, Andrei Shakirin <[email protected]>wrote: > > > -----Original Message----- > > From: Chandra Sekhar [mailto:[email protected]] > > Sent: Dienstag, 7. Januar 2014 11:24 > > To: [email protected] > > Subject: Re: Query regarding CXF dynamic dispatch client > > > > Hi Andrei & All, > > > > Thanks for your reply. > > > > Actually I tried the same in my TYPE-2 approach. But, I am concerned > about > > the fact that it uses plain JAX-WS API to dispatch the request. With this > > approach, shall I be able to leverage the CXF's advanced feature support > (like > > WS-*). > > > > Yes, CXF features like security, ws-addressing, ws-policy are available > also for Dispatch case. > Under standard JAX-WS API call you will invoke CXF implementation with > interceptors chain, etc. > > Regards, > Andrei. > > > Any references to similar implementations are greatly appreciated. > > > > Thanks, > > Chandu. > > > > > > > > On Tue, Jan 7, 2014 at 2:42 PM, Andrei Shakirin > > <[email protected]>wrote: > > > > > Hi, > > > > > > I guess it is use case for the Dispatch interface. The code can look > like: > > > ... > > > String serviceName = "myService"; > > > Service service = Service.create(serviceName); > > > String actualSoapBinding = (soapBinding != null) ? soapBinding > : > > > SOAPBinding.SOAP11HTTP_BINDING; > > > service.addPort(portName, actualSoapBinding, targetEndpoint); > > > Dispatch<StreamSource> dispatcher = > > > service.createDispatch(portName, StreamSource.class, > > > Service.Mode.PAYLOAD); > > > ... > > > StreamSource request; > > > response = dispatcher.invoke(request); > > > ... > > > > > > You can look also in jaxws_dispatch_provider sample of CXF > > > distribution for details. > > > > > > Regards, > > > Andrei. > > > > > > > -----Original Message----- > > > > From: Chandra Sekhar [mailto:[email protected]] > > > > Sent: Montag, 6. Januar 2014 10:09 > > > > To: [email protected] > > > > Subject: Query regarding CXF dynamic dispatch client > > > > > > > > Hi, > > > > > > > > I have a peculiar use-case where in I need to invoke a SOAP Service > > > without > > > > refering the WSDL and without creating the stubs & JAXB classes. > > > > Custom implementation of data mapping well suits to our needs and > > > > infact we > > > have it > > > > in-place. > > > > > > > > I have the following information to invoke the Service : > > > > > > > > Style and Use > > > > Operation Name > > > > Namespace URI > > > > SOAPAction > > > > Endpoint URL > > > > Binding SOAP version - 1.1/1.2 > > > > > > > > > > > > With the above information we are able to make a service call using > > > Axis2. > > > > > > > > I am trying to achieve the same using CXF. Basically I tried the > below. > > > > > > > > > > > > > > > > import java.io.FileInputStream; > > > > import java.io.InputStream; > > > > import java.util.Iterator; > > > > > > > > import javax.xml.namespace.QName; > > > > import javax.xml.soap.MessageFactory; import javax.xml.soap.Node; > > > > import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPEnvelope; > > > > import javax.xml.soap.SOAPMessage; import javax.xml.soap.SOAPPart; > > > > import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import > > > > javax.xml.ws.soap.SOAPBinding; > > > > > > > > import org.apache.cxf.endpoint.Client; import > > > > org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; > > > > import org.w3c.dom.NodeList; > > > > > > > > > > > > public class CXFClient { > > > > > > > > /** > > > > * @param args > > > > */ > > > > public static void main(String[] args) { try { > > > > //TYPE-1 > > > > JaxWsDynamicClientFactory dcf = > > > > JaxWsDynamicClientFactory.newInstance(); > > > > Client client = dcf.createClient(" > > > > > > http://wsekhc1w7:8989/web/SOAPServlet/SOAP/TestService/Sample?WSDL > > > > "); > > > > Object[] res = client.invoke("TestServiceSOAP1", "Hello...!"); > > > > System.out.println("Response ::: " + res[0]); > > > > //TYPE-2 > > > > //QName serviceName = new > > QName("urn:SOAP:TestService:Sample", > > > > "SampleService"); > > > > //QName serviceName = new QName("Test", "Test"); QName > > serviceName = > > > > new QName("", ""); > > > > Service service = Service.create(serviceName); > > > > > > > > //QName portName = new QName("urn:SOAP:TestService:Sample", > > > > "SamplePortSOAP"); > > > > //QName portName = new QName("Test", "Test"); > > > > QName portName = new QName("", ""); > > > > > > > > service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, " > > > > http://wsekhc1w7:8989/web/SOAPServlet/SOAP/TestService/Sample"); > > > > Dispatch<SOAPMessage> dispatch = > > > > service.createDispatch(portName, SOAPMessage.class, > > > > Service.Mode.MESSAGE); > > > > > > > > // Test request-response > > > > InputStream is = new > > > > FileInputStream("F:\\CXF_Demo\\src\\SampleRequestEnvelope.xml"); > > > > SOAPMessage soapReqMsg = > > > > MessageFactory.newInstance().createMessage(null, is); > > > > > > > > SOAPMessage soapResMsg = dispatch.invoke(soapReqMsg); > > > > > > > > SOAPPart soapPart = soapResMsg.getSOAPPart(); > > > > SOAPEnvelope envelope = soapPart.getEnvelope(); > > > > SOAPBody body = envelope.getBody(); > > > > > > > > Iterator iter = body.getChildElements(); > > > > while(iter.hasNext()) > > > > { > > > > Node tempNode = (Node) iter.next(); > > > > if(tempNode.getNodeType()==Node.ELEMENT_NODE) > > > > { > > > > NodeList list = tempNode.getChildNodes(); > > > > for(int i=0; i<list.getLength(); i++) > > > > { > > > > if(list.item(i).getNodeType() == Node.ELEMENT_NODE) > > > > { > > > > NodeList list1 = tempNode.getChildNodes(); > > > > for(int j=0; j<list.getLength(); j++) > > > > { > > > > //System.out.println(list1.item(j).getNodeName()); > > > > if(list1.item(j).getNodeType() == Node.ELEMENT_NODE) > > > > { > > > > System.out.println("NodeName : " + list1.item(j).getNodeName() > > > > + "\n NodeValue : " + list1.item(j).getFirstChild().getNodeValue()); > > > > } > > > > } > > > > } > > > > } > > > > } > > > > //System.out.println("TempNode : " + tempNode.getNodeName()); > > > > } > > > > } > > > > catch(Exception e) > > > > { > > > > e.printStackTrace(); > > > > } > > > > } > > > > } > > > > > > > > > > > > > > > > In the above code snippet, TYPE-1 is using CXF's dynamic client with > > > which > > > > found no way to decouple the WSDL dependency. Because all the > > > > JaxWsDynamicClientFactory.createClient() overloaded methods need > > > > WSDL URL. > > > > > > > > Though TYPE-2 does the same for us (without WSDL URL), but the > > > > concern here is that it uses the JAX-WS API and can we be able to > > > > embedd the CXF feature support (like WS-*). > > > > > > > > Suggestion to implement CXF dynamic client (without stubs & classes > > > > creation) greatly appreciated. > > > > > > > > Thanks in advance. > > > > > > > > Regards, > > > > Chandu > > > >
