cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benson Margulies" <bim2...@basistech.com>
Subject RE: customizing the HTTP transport factory
Date Sun, 15 Jul 2007 12:02:21 GMT
By the way, here's what was really surprising about this. 

When I first hit the NPE, I thought, "OK, I need to set some transport
IDs. Let's see what the standard version of the class has."

So, I turned off my class and set a breakpoint at the spot that looked
at the transport ids. It was never called.

I apologize for not capturing the details, but, in general, when the
code is setting up lazily as a result of a call to get a server for a
service, the rest of the (un)initialization status causes the logic to
assume that there will be no transport ids, and it makes some
assumptions, instead. By creating and advertising a factory on the bus
before entering that code, I'm obviating all of that.

Now, ignorantly, I would suggest that I should be able to arrange the
same convenient treatment for my subclass as the standard class gets. 

Or, alternatively, your concept might be: 

"As soon as you (ahem) open the jar and start customizing things, we
recommend spring wiring, and look at the supplied files to see how it's
done."



> -----Original Message-----
> From: Dan Diephouse [mailto:dan@envoisolutions.com]
> Sent: Saturday, July 14, 2007 1:57 PM
> To: cxf-user@incubator.apache.org
> Subject: Re: customizing the HTTP transport factory
> 
> Hi Benson,
> 
> You're very close to getting it to work :-)  If you look at the
> cxf-extension-http-jetty.xml file you'll see that we associate several
> transport IDs with that transport:
> 
>     <bean class="
> org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory"
> lazy-init="true">
>         <property name="bus" ref="cxf"/>
>         <property name="transportIds">
>             <list>
>                 <value>http://schemas.xmlsoap.org/soap/http</value>
>                 <value>http://schemas.xmlsoap.org/wsdl/http/</value>
>
<value>http://schemas.xmlsoap.org/wsdl/soap/http</value>
>                  <value>http://www.w3.org/2003/05/soap/bindings/HTTP/
> </value>
>
<value>http://cxf.apache.org/transports/http/configuration
> </value>
>                 <value>http://cxf.apache.org/bindings/xformat</value>
>             </list>
>         </property>
>     </bean>
> 
> In code form, this is equivalent to:
> 
> Set<String> tids = new HashSet<String>();
> tids.add("http://schemas.xmlsoap.org/soap/http");
> ... etc for all transport ids
> 
> httpTransport.setTransportIds(tids);
> 
> for (String tid : tids) {
>   dfm.registerDestinationFactory(tid, httpTransport);
> }
> 
> We should really write some docs on the transport layer, but hopefully
> this
> will get you going in the meantime.
> 
> Thanks,
> - Dan
> 
> 
> On 7/13/07, Benson Margulies <bim2007@basistech.com> wrote:
> >
> > I set out to replace JettyHTTPTransportFactory with a slightly
modified
> > version. So, I wrote the code below.
> >
> > The effect is an NPE when my factory object is asked for its
> > transportIds, of which it has none. When I don't try to set this up,
the
> > default transport factory does not get asked for its transport ids,
> > apparently because other things that aren't initialized protect it
from
> > being asked.
> >
> > I think I see what the transport Id has to be for SOAP, so I can
just
> > set it, but is this idea supposed to work without that?
> >
> >
> >
> >        Bus bus =  BusFactory.getDefaultBus();
> >         DestinationFactoryManager dfm =
> > bus.getExtension(DestinationFactoryManager.class);
> >         JettyHTTPTransportFactoryForStaticContent transportFactory =
new
> > JettyHTTPTransportFactoryForStaticContent();
> >         transportFactory.setBus(bus);
> >
> >
dfm.registerDestinationFactory("http://cxf.apache.org/transports/http/co
> > nfiguration", transportFactory);
> >
> 
> 
> 
> --
> Dan Diephouse
> Envoi Solutions
> http://envoisolutions.com | http://netzooid.com/blog

Mime
View raw message