> Hi Daniel,
>
> This was with CXF 2.1.1 I'm actually working on getting CXF working
> within infiniflow (based on newton -
http://newton.codecauldron.org)
> as a provider of a web services binding.
>
> I've now managed to get the JaxWsProxyFactoryBean working now though
> it still needs the patch I mentioned to
> org.apache.cxf.frontend.ClientProxyFactoryBean - diff file attached.
> In this usecase the CXF libraries are packaged in one bundle but the
> "client" code i.e. the code that asks for the proxy to be created is
> packaged in a separate bundle. The CXF code is then linked to the
> client through the SCA of a binding.
>
> This allows multiple client bundles to reuse CXF without having to
> embed it in the client bundle (or for that matter even know that CXF
> is involved - they just ask for an SCA <binding.ws /> which happens to
> be implemented by CXF). However this means that the client bundle does
> not have the CXF libraries in it's bundle classpath - hence the need
> to do some classloader juggling via the Thread.contextClassLoader.
>
> In general I'm not a big fan of using Thread.contextClassLoader as
> it's a little ambiguous - prefer an explicit declaration of the
> classloader to be used but this would have been a much larger change
> to the CXF code which I didn't want to attempt without the aid of a
> safety net :)
>
> The "javax.xml.ws.WebServiceException: Could not find wsdl:binding
> operation info..." issue turned out to be with the way I was using the
> interface/impl - the combination that worked in the end was to
> explicitly add the @WebService etc annotations to the class/interface
> etc, like so:
>
> package com.paremus.infiniflow.example.cxf;
>
> import javax.jws.WebParam;
> import javax.jws.WebService;
>
> @WebService
> public interface HelloWorld {
> String sayHello(@WebParam(name="text") String name);
> }
>
> -------------------------------------------------------------
>
> package com.paremus.infiniflow.example.cxf;
>
> import javax.jws.WebService;
>
> @WebService(endpointInterface =
> "com.paremus.infiniflow.example.cxf.HelloWorld",
> serviceName = "HelloWorld")
>
> public class HelloWorldImpl implements HelloWorld {
> public String sayHello(String name) {
> return "Hello " + name;
> }
> }
>
> I didn't get around to exploring what the minimum set of annotations
> was to get this working. Incidentally is there a case for CXF
> automagically inferring webservice info from interfaces that are this
> trivial? It seems a little verbose in this case to have to annotate a
> single method interface/impl. Though I appreciate this is not the
> general use case...
>
> I'm still having some problems with https but not sure this is OSGi
> related so possibly best to follow up in a separate email thread if
> necessary. I currently suspect issue is with my certificate chain as
> get a message
>
> 2008-07-03 13:23:25.023::WARN: EXCEPTION
> javax.net.ssl.SSLHandshakeException: Received fatal alert:
> certificate_unknown
> at
> com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
>
> When the JaxWsProxy tries to invoke the method call on the client.
>
> Regards,
>
> Dave
>
> 2008/7/1 Daniel Kulp <
dkulp@...>:
> >
> > Have you tried this with CXF 2.1.1 or 2.1 or other?
> >
> > We did some work in 2.1.1 to hopefully help some of the issues, but I'm
> not really sure about this specific issue.
> >
> >
> > In general, we kind of recommend using the spring dynamic modules for
> OSGi. The servicemix 4 folks have an example at:
> >
http://servicemix.apache.org/SMX4/cxf-examples.html#CXFexamples-Inside> > that shows how that works. When you do that, all the spring config
> things should work.
> >
> > Dan
> >
> > On Jun 27, 2008, at 12:02 PM, David Savage wrote:
> >
> >> Hi there,
> >>
> >> I'm trying to get cxf to work in an OSGi environment and have been
> banging my head against the desk a bit, suspect it might be due to leaping
> in at the deep end but any help would be appreciated.
> >>
> >> Ok here's what I've got working:
> >>
> >> JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
> >> svrFactory.setServiceClass(HelloWorld.class);
> >> svrFactory.setServiceBean(HelloWorldImpl());
> >> svrFactory.setAddress("
http://localhost:9000/hello" );
> >> svrFactory.create();
> >>
> >> This launches an internal jetty server and when I test this using a web
> browser I can at least see that the server is running as I get a soap
> response:
> >>
> >> <soap:Envelope>
> >> <soap:Body>
> >> <soap:Fault>
> >> <faultcode>soap:Server</faultcode>
> >> <faultstring>No such operation: </faultstring>
> >> </soap:Fault>
> >> </soap:Body>
> >> </soap:Envelope>
> >>
> >> However I've not been able to get a client working in OSGi. Initially
> this was due to code in the org.apache.cxf.frontend.ClientProxyFactoryBean
> which assumed the classloader to generate the proxy would be the loader of
> the client interface. I've worked around that in a local patch here by
> setting Thread.contextClassLoader.
> >>
> >> Here's what I have on the client side:
> >>
> >> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
> >> factory.setServiceClass(reference.getInterface());
> >> factory.setAddress("
http://localhost:9000/hello");
> >> // set context classloader
> >> ...
> >> HelloWorld proxy = factory.create();
> >> proxy.sayHello("World");
> >>
> >>
> >> However the client still fails due to a null BindingDetails object which
> is loaded when my test method is invoked:
> >>
> >> javax.xml.ws.WebServiceException: Could not find wsdl:binding operation
> info for web method sayHello.
> >> at
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:150)
> >> at $Proxy35.sayHello(Unknown Source)
> >>
> >> Is there a stage I'm missing here?
> >>
> >> I'm also trying to get cxf to work with an https connection (both client
> and server). On the server side I've figured out that the process has
> something to do with doing something like:
> >>
> >> server = svrFactory.create();
> >>
> >> JettyHTTPDestination dest = (JettyHTTPDestination)
> server.getDestination();
> >> JettyHTTPServerEngine engine = (JettyHTTPServerEngine) dest.getEngine();
> >>
> >> if ( secure ) {
> >> TLSServerParameters params = new TLSServerParameters();
> >> // set params
> >> engine.setTlsServerParameters(params);
> >> }
> >>
> >> But again I'm not having much luck. Is there any example code I can
> follow or that someone can post to show how this should work?
> >>
> >> Thanks in advance for any help.
> >>
> >> Regards,
> >>
> >> Dave
> >>
> >> _______________________________________________________________________
> >> Paremus Limited. Registered in England
> >> No. 4181472
> >> Registered Office: 22-24 Broad Street, Wokingham, Berks RG40 1BA
> >> Postal Address: 107-111 Fleet Street, London, EC4A 2AB
> >> The information transmitted is intended only for the person(s) or entity
> to which it is addressed and may contain confidential and/or privileged
> material. Any review, retransmission, dissemination or other use of, or
> taking of any action in reliance upon, this information by persons or
> entities other than the intended recipient is prohibited.
> >> If you received this in error, please contact the sender and delete the
> material from any computer.
> >> _______________________________________________________________________
> >
> > ---
> > Daniel Kulp
> >
dkulp@...
> >
http://www.dankulp.com/blog> >
> >
> >
> >
>