Hi, See my answers bellow:
> -----Original Message----- > From: Das, Santosh [mailto:[email protected]] > Sent: Dienstag, 25. Februar 2014 10:21 > To: Andrei Shakirin; [email protected]; Daniel Kulp ([email protected]) > Subject: RE: Information on using Interceptors in Service Side > > Tried the same and getting same fault > > // TODO Auto-generated method stub > try{ > setUp(); > PegaServiceProvider hello = new PegaServiceProvider(); > String address = "http://localhost:9000/hello"; > Endpoint.publish(address, hello); > > > }catch(Exception e){ > e.printStackTrace(); > } > > > Result : > > WARNING: Interceptor for {http://esb.talend.org/}PegaServiceProviderService > has thrown exception, unwinding now > org.apache.cxf.interceptor.Fault: Message part {http://esb.talend.org/}sayHi > was not recognized. (Does it exist in service WSDL?) > at > org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.validatePart(DocLitera > lInInterceptor.java:253) > at > org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLi > teralInInterceptor.java:191) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai > n.java:308) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationOb > server.java:121) > at > org.sopera.cxf.transport.SBBDestination$SendJob.run(SBBDestination.java:193) > at java.util.concurrent.Executors$RunnableAdapter.call(Unknown > Source) > at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) > at java.util.concurrent.FutureTask.run(Unknown Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access > $301(Unknown Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(U > nknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown > Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown > Source) > at java.lang.Thread.run(Unknown Source) > > > PegaServiceProvider basically has > > @WebServiceProvider() > @ServiceMode(value = Service.Mode.PAYLOAD) > public class PegaServiceProvider implements Provider<Source> { > > public Source invoke(Source request) { > > System.out.println("invoke method ..."); > return null; > } > } > > As you mentioned . It seems that CXF doesn't recognize the message part in AbstractInDatabindingInterceptor.findMessagePart(). Could you please catch the wire SOAP request and post it here? Could you also try the same service without your custom transport, for example with HTTP? > > If I understood correctly the invoke() should have business logic and also its > responsibility is to build response. > Yes. > Then what is the purpose of having backchannelconduit , I think its purpose is > also to send the response. > > Correct me if I am wrong. Yes, backchannel conduit is for sending response from the service. > > And also could you explain what did you mean by " It is also possible to > combine > Provider<Source> with spring or blueprint jaxws:endpoint to create your > service." > I mean that you can use a spring way to register the service with the class implemented Provider<T>: <jaxws:endpoint xmlns:tns="myNamespace" implementor="mycompany. PegaServiceProvider" endpointName="tns:myEndpoint" serviceName="tns:myService" address="http://localhost:8080/services/myService"> </jaxws:endpoint> Regards, Andrei. > -----Original Message----- > From: Andrei Shakirin [mailto:[email protected]] > Sent: Tuesday, February 25, 2014 1:41 PM > To: [email protected] > Cc: Das, Santosh > Subject: RE: Information on using Interceptors in Service Side > > Hi Santosh, > > > I don’t want to use the service bean for the CXF framework to engage > > interceptors as we don’t have the privilege to generate such a bean. > > If I don’t use the bean its throwing error in DocLiteralInInterceptor > > in private void validatePart(MessagePartInfo p, QName elName, Message m) > { > > if (p == null) { > > throw new Fault(new > > org.apache.cxf.common.i18n.Message("NO_PART_FOUND", LOG, elName), > > Fault.FAULT_CODE_CLIENT); > > > > } > > How are you going to invoke business logic on the service side? > If JaxWsServerFactoryBean with setting service class and service bean doesn't > fit, you can consider to use generic service Provider<T> implementation: > > @WebServiceProvider() > @ServiceMode(value = Service.Mode.PAYLOAD) > public class MySourcePayloadProvider implements Provider<Source> { > > public Source invoke(Source request) { > ... > } > } > ... > Object implementor = new MySourcePayloadProvider(); String address = > "http://localhost:9000/SoapContext/SoapPort1"; > Endpoint.publish(address, implementor); > > In invoke() method you can call whatever you want to process request and > return the response. > It is also possible to combine Provider<Source> with spring or blueprint > jaxws:endpoint to create your service. > Custom transport will be registered in the same way in this case. > > Regards, > Andrei. > > > -----Original Message----- > > From: Das, Santosh [mailto:[email protected]] > > Sent: Dienstag, 25. Februar 2014 08:39 > > To: Daniel Kulp; [email protected]; Andrei Shakirin > > Subject: RE: Information on using Interceptors in Service Side > > > > Hi there, > > > > We tried out the JAXWSServerFactoryBean approach , and it worked > > however it doesn’t fit our requirement. > > Please look at this example we have tried out package > > org.sopera.cxf.test; > > > > > > > > import org.apache.cxf.Bus; > > import org.apache.cxf.BusFactory; > > import org.apache.cxf.bus.managers.DestinationFactoryManagerImpl; > > import org.apache.cxf.jaxws.JaxWsServerFactoryBean; > > import org.apache.cxf.transport.ConduitInitiatorManager; > > import org.junit.Before; > > import org.sopera.cxf.transport.SBBTransportFactory; > > import org.talend.esb.HelloWorldImpl; > > public class publishcxf1 { > > @Before > > public static void setUp() throws Exception { > > Bus bus = BusFactory.getDefaultBus(); > > // Other way to fix the problem > > // printRegistrations(bus); > > DestinationFactoryManagerImpl dfm = new > > DestinationFactoryManagerImpl(bus); > > SBBTransportFactory sbbTransport = new > SBBTransportFactory(); > > > > > > dfm.registerDestinationFactory("http://cxf.apache.org/transports/sbb", > > sbbTransport); > > > > dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http > > ", sbbTransport); > > > > dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soa > > p/http", sbbTransport); > > > > ConduitInitiatorManager extension = > > bus.getExtension(ConduitInitiatorManager.class); > > > > > > extension.registerConduitInitiator("http://cxf.apache.org/transports/s > > b > > b", sbbTransport); > > > > extension.registerConduitInitiator("http://schemas.xmlsoap.org/soap/h > > ttp", sbbTransport); > > > > extension.registerConduitInitiator("http://schemas.xmlsoap.org/wsdl/s > > oap/http", sbbTransport); > > } > > /** > > * @param args > > */ > > public static void main(String[] args) { > > // TODO Auto-generated method stub > > try{ > > setUp(); > > HelloWorldImpl hello = new HelloWorldImpl(); > > JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean(); > > sf.setServiceBean(hello); // don’t want to do this > > because we don’t have a bean and our design doesn’t allow it. > > sf.setStart(true); > > sf.setBus(BusFactory.getDefaultBus(true)); > > sf.create(); > > > > > > }catch(Exception e){ > > e.printStackTrace(); > > } > > > > } > > > > } > > > > As I said previously we have custom layers which is a servlet based > > implementation and we get hold of the request envelope. > > I don’t want to use the service bean for the CXF framework to engage > > interceptors as we don’t have the privilege to generate such a bean. > > If I don’t use the bean its throwing error in DocLiteralInInterceptor > > in private void validatePart(MessagePartInfo p, QName elName, Message m) > { > > if (p == null) { > > throw new Fault(new > > org.apache.cxf.common.i18n.Message("NO_PART_FOUND", LOG, elName), > > Fault.FAULT_CODE_CLIENT); > > > > } > > > > Is it possible not to engage interceptors in the service side if we > > don’t have a service bean. Basically not doing > > sf.setServiceBean(hello); > > > > we have evaluated CXF for our client side and able to leverage the > > power of interceptors using dispatch API. > > However we're kind of stuck at service side. > > > > Please let us know how we could use this in our implementation which > > is not a JAX-ws based implementation. > > > > > > Thanks, > > Santosh > > > > > > > > > > -----Original Message----- > > From: Daniel Kulp [mailto:[email protected]] > > Sent: Monday, February 24, 2014 9:58 PM > > To: [email protected]; Das, Santosh > > Subject: Re: Information on using Interceptors in Service Side > > > > > > On Feb 24, 2014, at 11:14 AM, Das, Santosh <[email protected]> > > wrote: > > > > > Hi Andrei, > > > > > > While trying out the approach of custom conduit I wanted to know if > > > the entry point of code can be anything other than > > > Endpoint.publish() > > > > Yes. Kind of. > > > > You can use the JaxWsServerFactoryBean to create CXF server objects which > > represent the service and manipulate that. The normal JAX-WS Endpoint > > object pretty much just wrappers an Server object so MOST of the > functionality > > would be there. However, it’s not an “javax.xml.ws.Endpoint” object and > thus > > code that expects that could be problematic. > > > > Alternatively, just "new org.apache.cxf.jaxws.EndpointImpl(….)”. > > > > > > Dan > > > > > > > > > > > > What we saw is if we register create a custom destination and > > > conduit and > > resister custom transport it eventually kicks in the interceptor chain. > > > Is there any other way of engaging the interceptors? > > > > > > > > > > > > Thanks > > > Santosh > > > > > > -----Original Message----- > > > From: Andrei Shakirin [mailto:[email protected]] > > > Sent: Monday, February 24, 2014 1:38 PM > > > To: [email protected] > > > Cc: Das, Santosh > > > Subject: RE: Information on using Interceptors in Service Side > > > > > > Hi Santosh, > > > > > > > > >> Excellent! That’s close to what we need. > > > > > > Nice, Btw I have the similar use case in the past: customer required > > > the wire > > compatibility with legacy ESB applications (speaking SOAP with some > > proprietary extensions), but would like to use CXF and JAX-WS as > > frontend. It was resolved and implemented using CXF custom transport. > > > > > >> Also could you please guide to some articles which describes about > > >> saml > > token validation at service side. > > > > > > I would start with a link to Glen's blog I already sent Renu: SAML > > > using ws- > > policy: http://www.jroller.com/gmazza/entry/cxf_sts_tutorial . It > > covers obtaining and validation of SAML token using STS service. > > > > > > Regards, > > > Andrei. > > > > > > > > > So you are going to keep your own transport layer receiving and > > > sending soap > > messages: > > >> Servlet → getting the request soap envelope (custom layer ,don’t > > >> want to use CXF) generate response (again custom layer and don’t > > >> want > > >> CXF) > > > > > > Did I get that correctly? > > > > > > In this case I would consider to implement custom transport in CXF. > > > You will > > be able to wrap your custom layer into CXF Destination and Conduit. > > > The interceptor chain with security features will work natively in this > > > case. > > > Look my blog for details: > > > http://ashakirin.blogspot.de/2012/02/custom-cxf-transport.html > > > > > > Regards, > > > Andrei. > > > > > > From: Das, Santosh [mailto:[email protected]] > > > Sent: Freitag, 21. Februar 2014 11:54 > > > To: Andrei Shakirin; [email protected] > > > Subject: RE: Information on using Interceptors in Service Side > > > > > > Hi Andrei, > > > > > > No the idea is to swap out both XWSS api and SAML processing and > > > use CXF > > layer in service side. > > > So does CXF exposes API’s directly so that I could engage only > > > interceptors I > > am interested in and get the functionality. > > > > > > The flow is like this > > > > > > Servlet → getting the request soap envelope (custom layer ,don’t > > > want to use CXF)→engage CXF api’s directly or via interceptors(here > > > we want to use CXF features like SAML validation, Ws-Security stuff) > > > →generate response (again custom layer and don’t want CXF) > > > > > > Hope scenario is clear now. > > > > > > Please provide your suggestions. > > > > > > > > > Thanks, > > > Santosh > > > > > > From: Andrei Shakirin [mailto:[email protected]] > > > Sent: Friday, February 21, 2014 4:01 PM > > > To: [email protected] > > > Cc: Das, Santosh > > > Subject: RE: Information on using Interceptors in Service Side > > > > > > Hi Santosh, > > > > > > As I understood you are going to keep XWSS API on client and service > > > sides, > > but would like to reuse some CXF functionality for SAML processing on > > the service side (SAML validation, holder of key check, etc). > > > So the aim is not to migrate service side to CXF completely, but > > > just reuse > > some security functionality from it. > > > Is my understanding correct? > > > > > > I see three options here: > > > A) Provide kind of CXF layer on the service side, that will receive > > > messages > > from wire, validate security and SAML and pass SOAP messages to XWSS > > API implementation. Vice versa for outgoing chain: SOAP messages will > > be prepared in XWSS API service, CXF will be called with prepared > > message, apply necessary security and send message. CXF layer will > > include complete CXF interceptors chain and transport. > > > B) Implement generic CXF gateway. CXF gateway will receive SOAP > > > messages, validate them and redirect to XWSS services. Vice versa > > > for outgoing chain > > > C) Try to reuse only specific CXF interceptors functionality > > > directly from XWSS > > services. Seems to be involved, because CXF security interceptors has > > some dependencies on CXF API and core. > > > > > > Regards, > > > Andrei. > > > > > > From: Das, Santosh [mailto:[email protected]] > > > Sent: Donnerstag, 20. Februar 2014 10:48 > > > To: Andrei Shakirin > > > Cc: [email protected] > > > Subject: FW: Information on using Interceptors in Service Side > > > > > > Hi Andrei, > > > > > > First of all many thanks for the help and support you have been providing. > > > > > > This is in continuation to the discussion below regarding CXF being > > > used in > > server side. > > > > > > As Renu already mentioned we have a custom implementation of soap > > services which is not JAX-WS based , we are using XWSS API (a > > subproject of > > metro) and WSS4J directly for SAML processing. > > > > > > Is there any direct API which CXF exposes which can be used in the > > > service > > side to do ws-security processing, saml validation , etc. > > > > > > Basically we want to use the INInterceptors in the service side and > > > the > > engage the out interceptors after generating the soap response. > > Typically the highlighted portion of the diagram. > > > We are not interested to publish the service either as we have our > > > own > > implementation so cant use the Enpoint api. > > > > > > > > > We are kind of stuck and wondering if CXF could be of any help Out > > > of the > > box. > > > > > > Please advise. > > > > > > > > > > > > > > > > > > From: renu gupta [mailto:[email protected]] > > > Sent: Thursday, February 20, 2014 2:49 PM > > > To: Das, Santosh > > > Subject: Fwd: Information on using Interceptors in Service Side > > > > > > FYI > > > > > > Thanks, > > > Renu > > > ---------- Forwarded message ---------- > > > From: Andrei Shakirin <[email protected]> > > > Date: Thu, Feb 20, 2014 at 1:52 PM > > > Subject: RE: Information on using Interceptors in Service Side > > > To: "[email protected]" <[email protected]> > > > Cc: renu gupta <[email protected]> > > > Hi, > > > > > > If you will use ws-policy, it is enough to attach (embed) the policy > > > into WSDL > > and configure necessary security parameters like keystores and alias. > > > CXF will care about activation of necessary interceptors automatically. > > > > > > I would recommend you to look in Glen Mazza blogs: > > > - UsernameToken security using ws-policy > > http://www.jroller.com/gmazza/entry/cxf_usernametoken_profile > > > - SAML using ws-policy: > > http://www.jroller.com/gmazza/entry/cxf_sts_tutorial > > > > > > Just make that step by step, you will have a filling how it works CXF. > > > If you like to understand internal ws-policy mechanisms in CXF, > > > refer my blog: > > > http://ashakirin.blogspot.de/2012/02/using-ws-policy-in-cxf-projects > > > .h > > > tml > > > > > > I hope it is helpful. > > > > > > Regards, > > > Andrei. > > > > > > > > > From: renu gupta [mailto:[email protected]] > > > Sent: Donnerstag, 20. Februar 2014 06:09 > > > To: Andrei Shakirin > > > Subject: Re: Information on using Interceptors in Service Side > > > > > > The link which you have given talks about configuration at connector > > > end but I > > want to know how we can leverage the interceptors at services end. We > > are having our custom implementation which takes care of invocation of > > service, publishing it and doing authentication and we uses Metro for > > security feature, we want to use CXF instead of Metro and wss4j. So we > > don't want to change the whole implementation of the Services we have > > now , but just want to hook in CXF interceptors or API's if available > > to do the validation etc for the Security/ Addressing and SAML case. > > > > > > > > > Thanks, > > > Renu > > > > > > On Wed, Feb 19, 2014 at 9:50 PM, Andrei Shakirin > > > <[email protected]> > > wrote: > > > Hi, > > > > > > There are different ways to do that: > > > a) using ws-policy – recommended way > > > b) using features (WS-Addressing) and security actions configuration > > (security) > > > c) configure interceptors in client/endpoint or bus level > > > d) add interceptors dynamically for code > > > > > > I would prefer alternative (a) for WSA and SAML > > (http://cxf.apache.org/docs/ws-securitypolicy.html), but final > > decision depends on your requirements. > > > > > > Regards, > > > Andrei. > > > > > > From: renu gupta [mailto:[email protected]] > > > Sent: Mittwoch, 19. Februar 2014 16:31 > > > To: [email protected]; Andrei Shakirin > > > Subject: Information on using Interceptors in Service Side > > > > > > Hi , > > > > > > We are having our own custom service implementation which takes care > > > of > > publishing the wsdl. We were using the Metro for the security feature > > and wss4j for the SAML support. As we are planning to leverage CXF. I > > have some doubts : > > > How can we use the interceptors to achieve the particular feature > > > like WS > > Addressing , SAML . Does CXF provides the API’s directly which we can hook ? > > > > > > Thanks, > > > Renu > > > > > > > > > > -- > > Daniel Kulp > > [email protected] - http://dankulp.com/blog Talend Community Coder - > > http://coders.talend.com
