You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Chandra Sekhar <ch...@gmail.com> on 2014/01/06 10:09:25 UTC

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

Re: Query regarding CXF dynamic dispatch client

Posted by Chandra Sekhar <ch...@gmail.com>.
Thank you Andrei.

Regards,
Chandu.


On Thu, Jan 9, 2014 at 4:57 PM, Andrei Shakirin <as...@talend.com>wrote:

> Hi,
>
> I see two options:
> a) add necessary interceptors directly into client.
>       For example, for ws-addressing:
>         Client client = ((DispatchImpl)dispatch).getClient();
>
>                  MAPCodec mapCodec = new MAPCodec();
>                  MAPAggregatorImpl mapAggregator = new MAPAggregatorImpl();
>
>         client.getOutInterceptors().add(mapCodec);
>         client.getOutInterceptors().add(mapAggregator);
>         client.getInInterceptors().add(mapCodec);
>         client.getInInterceptors().add(mapAggregator);
>                ...
>
>       See AddressingFeatureApplier for exact interceptors list
>      The same way add interceptors for security. Necessary context
> properties can be set using dispatch.getRequestContext();
>
> b) Using dynamic policy approach:
>     implement custom interceptor invoking before PolicyOutInterceptor and
> PolicyInInterceptor, which:
>     a) interceptor parses ws-policy with necessary WSA and security
> assertions using Neethy;
>     b) applies this policy into PolicyConstants.POLICY_OVERRIDE message
> property
>
>  For details see the following blog
> http://ashakirin.blogspot.de/2012/02/using-ws-policy-in-cxf-projects.html.
>
> Regards,
> Andrei.
>
>
>
>
> > -----Original Message-----
> > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > Sent: Mittwoch, 8. Januar 2014 13:18
> > To: users@cxf.apache.org
> > Subject: Re: Query regarding CXF dynamic dispatch client
> >
> > Hi Andrei,
> >
> > Thanks for your reply.
> >
> > Basically, I am trying to use dispatch API to invoke a SOAP Service with
> WS-
> > Security & WS-Addressing enabled. So, how we will be able to use
> > interceptors concept in CXF, to add Security headers to SOAP request
> > envelope.
> >
> > Any references to such sample implementation for this, will be great
> helpful.
> >
> > Thanks,
> > Chandu.
> >
> >
> >
> > On Wed, Jan 8, 2014 at 2:41 PM, Andrei Shakirin
> > <as...@talend.com>wrote:
> >
> > > Hi,
> > >
> > > Could you explain your use case a bit more, what CXF functionality you
> > > need in conjunction with Dispatch?
> > >
> > > Regards,
> > > Andrei.
> > >
> > > > -----Original Message-----
> > > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > > Sent: Dienstag, 7. Januar 2014 12:31
> > > > To: users@cxf.apache.org
> > > > Subject: Re: Query regarding CXF dynamic dispatch client
> > > >
> > > > 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
> > > > <as...@talend.com>wrote:
> > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > > > > Sent: Dienstag, 7. Januar 2014 11:24
> > > > > > To: users@cxf.apache.org
> > > > > > 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
> > > > > > <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > > > > > > Sent: Montag, 6. Januar 2014 10:09
> > > > > > > > To: users@cxf.apache.org
> > > > > > > > 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.JaxWsDynamicClientFact
> > > > > > > > ory; 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
> > > > > > >
> > > > >
> > >
>

RE: Query regarding CXF dynamic dispatch client

Posted by Andrei Shakirin <as...@talend.com>.
Hi,

I see two options:
a) add necessary interceptors directly into client.
      For example, for ws-addressing:
    	Client client = ((DispatchImpl)dispatch).getClient();

                 MAPCodec mapCodec = new MAPCodec();
                 MAPAggregatorImpl mapAggregator = new MAPAggregatorImpl();

    	client.getOutInterceptors().add(mapCodec);
    	client.getOutInterceptors().add(mapAggregator);
    	client.getInInterceptors().add(mapCodec);
    	client.getInInterceptors().add(mapAggregator);
               ...

      See AddressingFeatureApplier for exact interceptors list
     The same way add interceptors for security. Necessary context properties can be set using dispatch.getRequestContext();

b) Using dynamic policy approach: 
    implement custom interceptor invoking before PolicyOutInterceptor and PolicyInInterceptor, which:
    a) interceptor parses ws-policy with necessary WSA and security assertions using Neethy;
    b) applies this policy into PolicyConstants.POLICY_OVERRIDE message property

 For details see the following blog http://ashakirin.blogspot.de/2012/02/using-ws-policy-in-cxf-projects.html .

Regards,
Andrei.




> -----Original Message-----
> From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> Sent: Mittwoch, 8. Januar 2014 13:18
> To: users@cxf.apache.org
> Subject: Re: Query regarding CXF dynamic dispatch client
> 
> Hi Andrei,
> 
> Thanks for your reply.
> 
> Basically, I am trying to use dispatch API to invoke a SOAP Service with WS-
> Security & WS-Addressing enabled. So, how we will be able to use
> interceptors concept in CXF, to add Security headers to SOAP request
> envelope.
> 
> Any references to such sample implementation for this, will be great helpful.
> 
> Thanks,
> Chandu.
> 
> 
> 
> On Wed, Jan 8, 2014 at 2:41 PM, Andrei Shakirin
> <as...@talend.com>wrote:
> 
> > Hi,
> >
> > Could you explain your use case a bit more, what CXF functionality you
> > need in conjunction with Dispatch?
> >
> > Regards,
> > Andrei.
> >
> > > -----Original Message-----
> > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > Sent: Dienstag, 7. Januar 2014 12:31
> > > To: users@cxf.apache.org
> > > Subject: Re: Query regarding CXF dynamic dispatch client
> > >
> > > 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
> > > <as...@talend.com>wrote:
> > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > > > Sent: Dienstag, 7. Januar 2014 11:24
> > > > > To: users@cxf.apache.org
> > > > > 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
> > > > > <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > > > > > Sent: Montag, 6. Januar 2014 10:09
> > > > > > > To: users@cxf.apache.org
> > > > > > > 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.JaxWsDynamicClientFact
> > > > > > > ory; 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
> > > > > >
> > > >
> >

Re: Query regarding CXF dynamic dispatch client

Posted by Chandra Sekhar <ch...@gmail.com>.
Hi Andrei,

Thanks for your reply.

Basically, I am trying to use dispatch API to invoke a SOAP Service with
WS-Security & WS-Addressing enabled. So, how we will be able to use
interceptors concept in CXF, to add Security headers to SOAP request
envelope.

Any references to such sample implementation for this, will be great
helpful.

Thanks,
Chandu.



On Wed, Jan 8, 2014 at 2:41 PM, Andrei Shakirin <as...@talend.com>wrote:

> Hi,
>
> Could you explain your use case a bit more, what CXF functionality you
> need in conjunction with Dispatch?
>
> Regards,
> Andrei.
>
> > -----Original Message-----
> > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > Sent: Dienstag, 7. Januar 2014 12:31
> > To: users@cxf.apache.org
> > Subject: Re: Query regarding CXF dynamic dispatch client
> >
> > 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
> > <as...@talend.com>wrote:
> >
> > >
> > > > -----Original Message-----
> > > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > > Sent: Dienstag, 7. Januar 2014 11:24
> > > > To: users@cxf.apache.org
> > > > 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
> > > > <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > > > > Sent: Montag, 6. Januar 2014 10:09
> > > > > > To: users@cxf.apache.org
> > > > > > 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
> > > > >
> > >
>

RE: Query regarding CXF dynamic dispatch client

Posted by Andrei Shakirin <as...@talend.com>.
Hi,

Could you explain your use case a bit more, what CXF functionality you need in conjunction with Dispatch?

Regards,
Andrei.

> -----Original Message-----
> From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> Sent: Dienstag, 7. Januar 2014 12:31
> To: users@cxf.apache.org
> Subject: Re: Query regarding CXF dynamic dispatch client
> 
> 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
> <as...@talend.com>wrote:
> 
> >
> > > -----Original Message-----
> > > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > > Sent: Dienstag, 7. Januar 2014 11:24
> > > To: users@cxf.apache.org
> > > 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
> > > <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > > > Sent: Montag, 6. Januar 2014 10:09
> > > > > To: users@cxf.apache.org
> > > > > 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
> > > >
> >

Re: Query regarding CXF dynamic dispatch client

Posted by Chandra Sekhar <ch...@gmail.com>.
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 <as...@talend.com>wrote:

>
> > -----Original Message-----
> > From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> > Sent: Dienstag, 7. Januar 2014 11:24
> > To: users@cxf.apache.org
> > 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
> > <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > > Sent: Montag, 6. Januar 2014 10:09
> > > > To: users@cxf.apache.org
> > > > 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
> > >
>

RE: Query regarding CXF dynamic dispatch client

Posted by Andrei Shakirin <as...@talend.com>.
> -----Original Message-----
> From: Chandra Sekhar [mailto:chandu.cs9999@gmail.com]
> Sent: Dienstag, 7. Januar 2014 11:24
> To: users@cxf.apache.org
> 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
> <as...@talend.com>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:chandu.cs9999@gmail.com]
> > > Sent: Montag, 6. Januar 2014 10:09
> > > To: users@cxf.apache.org
> > > 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
> >

Re: Query regarding CXF dynamic dispatch client

Posted by Chandra Sekhar <ch...@gmail.com>.
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-*).

Any references to similar implementations are greatly appreciated.

Thanks,
Chandu.



On Tue, Jan 7, 2014 at 2:42 PM, Andrei Shakirin <as...@talend.com>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:chandu.cs9999@gmail.com]
> > Sent: Montag, 6. Januar 2014 10:09
> > To: users@cxf.apache.org
> > 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
>

RE: Query regarding CXF dynamic dispatch client

Posted by Andrei Shakirin <as...@talend.com>.
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:chandu.cs9999@gmail.com]
> Sent: Montag, 6. Januar 2014 10:09
> To: users@cxf.apache.org
> 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