I think i got it to work using

   getBefore().add(DocLiteralInInterceptor.class.getName());

instead of

addBefore(DocLiteralInInterceptor.class.getName());

I have to try it out more to be sure.

The reason I want to throw my faults before DocLiteralInInterceptor is
because it was causing an issue that you previously commented on (explicit
validation is not being swallowed anymore so my errors are never thrown).
However, now I am running into problems where throwing my fault before the
DocLiteralInInterceptor gives me back an incomplete fault. What I mean is
that I have a special type of exception that is part of my service schema,
called TestException, which I dump into the Fault constructor (new Fault
(Throwable..)) and that type is only available to me AFTER
DocLiteralInInterceptor.

Basically, my problem is that I cannot get past DocLiteralInInterceptor if I
have input validation errors which were silent in 2.2.3. I am wondering if I
could turn it off somehow?

On Thu, Oct 1, 2009 at 2:24 PM, Daniel Kulp <[email protected]> wrote:

>
> Can you create a small test case and attach to the jira?
>
> When debugging, if you click on the chain object itself, it should print
> the
> chain.   Is your interceptor in there anywhere at all?
>
> Out of curiosity, why would you not just throw a fault from the first
> interceptor?  Why save it and throw it later?  Seems strange to me.
>
> Dan
>
>
> On Thu October 1 2009 3:29:49 pm Arik Gorelik wrote:
> > Hello All,
> >
> > I am using CXF 2.2.4-SNAPSHOT and running into a strange issue.
> >
> > I have a custom interceptor that does not do anything other than throw a
> > fault if it has one as a content of the incoming message. I am trying to
> > execute it BEFORE DocLiteralInInterceptor but AFTER URIMappingInterceptor
> >  in UNMARSHAL phase.
> >
> > This is how I am adding it for for some reason it does not fire (it is
> >  being skipped):
> >
> > public class TestFaultThrowingInterceptor extends
> > AbstractPhaseInterceptor<Message> {
> >
> >        public TestFaultThrowingInterceptor() {
> >                super(Phase.UNMARSHAL);
> >               addAfter(URIMappingInterceptor.class.getName());
> >                addBefore(DocLiteralInInterceptor.class.getName());
> >        }
> >
> >       public void handleMessage(Message message) throws Fault {
> >                // Obtain the fault from the previous phases
> >                Fault fault = (Fault) message.getContent(Exception.class);
> >                if (fault != null) {
> >                        throw fault;
> >                 }
> >        }
> >
> > }
> >
> > <jaxws:endpoint
> >            id="testService"
> >            implementor="testServiceImpl"
> >            wsdlLocation="wsdl/v29/testService.wsdl"
> >            address="/v29/testService">
> >            <jaxws:properties>
> >                <entry key="schema-validation-enabled" value="false" />
> >            </jaxws:properties>
> >            <jaxws:inInterceptors>
> >                <ref bean="testInterceptor" />
> >                 <ref bean="testFaultThrowingInterceptor" />
> >            </jaxws:inInterceptors>
> >    </jaxws:endpoint>
> >
> >
> > However, I've been debugging the code including the Interceptor Chain,
> but
> > not sure why my custom interceptor does not fire. After the
> > URIMappingInterceptor the execution in the chain goes straight to the
> > DocLiteralInInterceptor. Any ideas how I can invoke my interceptor?
> >
> > Thanks.
> > Arik.
> >
>
> --
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
>

Reply via email to