OK.  Figured out the problem.   Following your instructions exactly doesn't 
work on 2.2 either.   However, it's a problem with your setup.  

Your server.xml creates an endpoint on 
http://localhost:9000/SoapContext/SoapPort
at bus init time, which is fine.   

However, the Server.java then calls an Endpoint.publish(...) with the same URL 
and with the same names/wsdl/etc....    SOMEHOW (not sure yet), that is only 
PARTIALLY changing the the service registered on that URL.   I have to check 
what the right behavior is here.   I THINK the Endpoint.publish(...) should 
throw an exception in this case, but I'm not completely sure.   It might be 
trying to setup a multiplex case which may make some sense as well.   In that 
case, the stream level stuff would come before we can de-multiplex it so it 
may be a "last wins" case.    Definitely need to dig more on that.

In anycase, if you update your Server.java to do:    
    protected Server() throws Exception {
        System.out.println("Starting Server");
        //just startup a Bus, the jaxws:endpoint defined in server.xml
        //will then start
        org.apache.cxf.BusFactory.getDefaultBus();
    }

Then it would work fine.

Dan



On Friday 12 September 2008 1:28:41 pm Daniel Kulp wrote:
> On Friday 12 September 2008 7:55:33 am Wulff, Oliver wrote:
> > Were you able to reproduce the issue?
>
> Well, it works with 2.2 snapshots, but not with 2.1.3 snapshots.   That
> really sucks.   I have NO idea what fixes to 2.2 would have impacted this. 
>  I'll dig in.
>
> Dan
>
> > Thanks
> > Oliver
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Wulff, Oliver [mailto:[EMAIL PROTECTED]
> > Gesendet: So 07.09.2008 00:01
> > An: [email protected]; Daniel Kulp; [email protected]
> > Betreff: AW: Custom InInterceptor not called
> >
> > Hi Dan
> >
> > I give it a try with 2.1.2 but without success.
> >
> > I've done the following:
> >
> > 1) updated build.xml:
> >   <target name="server" description="run demo server" depends="build">
> >     <cxfrun classname="demo.stream.server.Server"
> >         param1="${basedir}/wsdl/hello_world.wsdl"
> >         jvmarg1="-Dcxf.config.file=server.xml"/>
> >   </target>
> >
> > 2) copied server.xml to directory configuration_interceptor
> >
> > 3) updated StreamInterceptor.java:
> >     public void handleMessage(Message message) {
> >         //TODO
> >
> >         boolean isOutbound = false;
> >         isOutbound = message == message.getExchange().getOutMessage()
> >
> >                || message == message.getExchange().getOutFaultMessage();
> >
> > System.out.println("handleMessage. Outbound: " + isOutbound);
> >         /*if (isOutbound) {
> >             OutputStream os = message.getContent(OutputStream.class);
> >             CachedStream cs = new CachedStream();
> >             message.setContent(OutputStream.class, cs);
> >
> >             message.getInterceptorChain().doIntercept(message);
> >
> >             try {
> >                 cs.flush();
> >                 CachedOutputStream csnew = (CachedOutputStream) message
> >                     .getContent(OutputStream.class);
> >                 GZIPOutputStream zipOutput = new GZIPOutputStream(os);
> >                 CachedOutputStream.copyStream(csnew.getInputStream(),
> > zipOutput, 1024);
> >
> >                 cs.close();
> >                 zipOutput.close();
> >                 os.flush();
> >
> >                 message.setContent(OutputStream.class, os);
> >             } catch (IOException ioe) {
> >                 ioe.printStackTrace();
> >             }
> >         } else {
> >             try {
> >                 InputStream is = message.getContent(InputStream.class);
> >                 GZIPInputStream zipInput = new GZIPInputStream(is);
> >                 message.setContent(InputStream.class, zipInput);
> >             } catch (IOException ioe) {
> >                 ioe.printStackTrace();
> >             }
> >         }*/
> >     }
> >
> > 4. updated server.xml:
> > ...
> >     <cxf:bus>
> >         <!--cxf:inInterceptors>
> >             <ref bean="GZIPStream"/>
> >         </cxf:inInterceptors>
> >         <cxf:inFaultInterceptors>
> >             <ref bean="GZIPStream"/>
> >         </cxf:inFaultInterceptors>
> >         <cxf:outInterceptors>
> >             <ref bean="GZIPStream"/>
> >         </cxf:outInterceptors-->
> >         <!--cxf:outFaultInterceptors>
> >              <ref bean="GZIPStream"/>
> >         </cxf:outFaultInterceptors-->
> >     </cxf:bus>
> > ...
> > <jaxws:endpoint id="streamInterceptor"
> > implementor="demo.stream.server.GreeterImpl"
> > address="http://localhost:9000/SoapContext/SoapPort";
> > wsdlLocation="wsdl/hello_world.wsdl"
> > endpointName="e:SoapPort"
> > serviceName="s:SOAPService"
> > xmlns:e="http://apache.org/hello_world_soap_http";
> > xmlns:s="http://apache.org/hello_world_soap_http";>
> > <jaxws:features>
> > <bean class="org.apache.cxf.feature.LoggingFeature"/>
> > </jaxws:features>
> >
> > <jaxws:inInterceptors>
> > <ref bean="GZIPStream"/>
> > </jaxws:inInterceptors>
> >
> > <jaxws:outInterceptors>
> > <ref bean="GZIPStream"/>
> > </jaxws:outInterceptors>
> >
> > </jaxws:endpoint>
> >
> >
> > And again, the interceptor is not called when the request is processed at
> > the server side. It is called only when the response is processed on the
> > server side.
> >
> > Thanks
> > Oliver
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Wulff, Oliver [mailto:[EMAIL PROTECTED]
> > Gesendet: Fr 05.09.2008 16:16
> > An: Daniel Kulp; [email protected]
> > Betreff: AW: Custom InInterceptor not called
> >
> > Hi Dan
> >
> > I use version 2.0.6.
> >
> > Thanks
> > Oliver
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Daniel Kulp [mailto:[EMAIL PROTECTED]
> > Gesendet: Fr 05.09.2008 16:10
> > An: [email protected]
> > Cc: Wulff, Oliver
> > Betreff: Re: Custom InInterceptor not called
> >
> >
> > Oliver,
> >
> > I tried this with the latest 2.2 snapshot code yesterday and it worked
> > fine. I got both messages printed out (true and false) on the console.
> >
> > Can you double check with the 2.1.2 release or let me know what version
> > this affects?
> >
> > Dan
> >
> > On Friday 05 September 2008 7:40:48 am Wulff, Oliver wrote:
> > > Hi there
> > >
> > > I came across the problem that my custom interceptor is added to the
> > > interceptor chain (cxf log message) but handleMessage isn't called. It
> > > works fine if the interceptor is configured for the bean CXFBeanImpl
> > > but it doesn't work if the interceptor is configured in the spring
> > > config as a sub element of the jaxws:endpoint.
> > >
> > > You can easily reproduce this with the demo
> > > "configuration_interceptor".
> > >
> > > 1) update the StreamInterceptor.java to only log that the interceptor
> > > has been called: //TODO
> > >
> > >         boolean isOutbound = false;
> > >         isOutbound = message == message.getExchange().getOutMessage()
> > >
> > >                || message ==
> > >                || message.getExchange().getOutFaultMessage();
> > >
> > >         System.out.println(">>>handleMessage: " + isOutbound);
> > >
> > > 2) update the server.xml to configure the interceptor as an in and out
> > > interceptor in the CXFBusImpl Bean: <bean id="cxf"
> > > class="org.apache.cxf.bus.CXFBusImpl">
> > >         <property name="inInterceptors">
> > >             <list>
> > >                 <ref bean="GZIPStream"/>
> > >             </list>
> > >         </property>
> > >         <property name="outInterceptors">
> > >             <list>
> > >                 <ref bean="GZIPStream"/>
> > >             </list>
> > >         </property>
> > >     </bean>
> > >
> > >
> > > 3) output of the server looks as expected when the client is run:
> > > server:
> > >      [java] Starting Server
> > >      [java] Server ready...
> > >      [java] >>>handleMessage: false
> > >      [java] Executing operation sayHi
> > >
> > >      [java] >>>handleMessage: true
> > >
> > >
> > > 4) then, I've configured the "jaxws:endpoint" Bean in the server.xml:
> > >
> > >     <jaxws:endpoint id="streamInterceptor"
> > >         implementor="demo.stream.server.GreeterImpl"
> > >         address="http://localhost:9000/SoapContext/SoapPort";
> > >         wsdlLocation="wsdl/hello_world.wsdl"
> > >         endpointName="e:SoapPort"
> > >         serviceName="s:SOAPService"
> > >         xmlns:e="http://apache.org/hello_world_soap_http";
> > >         xmlns:s="http://apache.org/hello_world_soap_http";>
> > >         <jaxws:features>
> > >             <bean class="org.apache.cxf.feature.LoggingFeature"/>
> > >         </jaxws:features>
> > >
> > >         <jaxws:inInterceptors>
> > >             <ref bean="GZIPStream"/>
> > >         </jaxws:inInterceptors>
> > >
> > >        <jaxws:outInterceptors>
> > >            <ref bean="GZIPStream"/>
> > >        </jaxws:outInterceptors>
> > >
> > >     </jaxws:endpoint>
> > >
> > >
> > > 5) output of the server when the client is run:
> > > server:
> > >      [java] Starting Server
> > >      [java] Server ready...
> > >      [java] Executing operation sayHi
> > >
> > >      [java] >>>handleMessage: true
> > >
> > > handleMessage is NOT called before the request is dispatched to the
> > > implementation.
> > >
> > > Any ideas?
> > >
> > > Thanks
> > > Oliver



-- 
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog

Reply via email to