Thanks again for your answer Sergey,

That is not possible right now - you'll need to use a custom handler
> to get conditional drops working
>

You suggest I go back to the Interceptor solution then (custom handler =
custom Interceptor?)?
I was at the stage where I could get the message in my custom outbound
Interceptor but I still don't know how to modify the SOAP request from
there. So if we look again at my current code for the Interceptor:

public class MyOutInterceptor extends AbstractSoapInterceptor {

public MyOutInterceptor() {
        super(Phase.SEND);
}

public void handleMessage(SoapMessage message) throws Fault {
        // Get message content for editing...
        StringWriter writer = new StringWriter();
        CachedOutputStream cos  =
(CachedOutputStream)message.getContent(OutputStream.class);
        InputStream inputStream = cos.getInputStream();
        IOUtils.copy(inputStream, writer, "UTF-8");
        String content = writer.toString();

        // remove the substrings from envelope if necessary...
        if (content.contains("<typeEnvoi>2</typeEnvoi>")) {
            content =
content.replace("<idJustification>0</idJustification>", "");
            content = content.replace("<indicRdv>false</indicRdv>", "");
            ByteArrayOutputStream outputStream = new
ByteArrayOutputStream();
            outputStream.write(content.getBytes(Charset.forName("UTF-8")));
                }
        message.setContent(OutputStream.class, outputStream);
     }
}

How could I modify the enveloppe by simply removing the unwanted XML tags
and then proceed with the actual sending of the message? Modifying the
message as a String is not the best solution I guess but I don't know how to
manipulate the SOAPMessage to achieve that...



> Use outDropElements list property, just list "indicRdv" and
> "idJustification". If they were qualified then you'd use
> "{http://example.mytests.com/}indicRdv";, etc...
>

Ok I used outDropElements and it seems to drop the right elements, but one
consequence of using the TransformOutInterceptor is that the Outbound
message is not logged anymore si I can't see what is really sent (using the
LoggingOutInterceptor)...

Sorry for my "newbie" questions but I appreciated your help.
Toutcon





>> On Tue, Aug 2, 2011 at 20:36, Sergey Beryozkin-5 [via CXF] <
>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4662049&i=2>>
wrote:
>>
>>> Hi
>>>
>>> Have a look please at Transform feature, that should be achieved
>>> easily enough by
>>> configuring outDropElements property.
>>> http://cxf.apache.org/docs/transformationfeature.html
>>> In CXF 2.4.1 one has to list all elements to be dropped, which should
>>> be ok for your case, looks like
>>> two simple element siblings need to be dropped;
>>> Aki added a support for deep drops too for incoming payloads, will be
>>> available in 2.4.2; sooner rather later the out transform writer will
>>> follow the suit :-)
>>>
>>> Cheers, Sergey
>>>
>>> On Tue, Aug 2, 2011 at 6:47 PM, [hidden email]<
http://user/SendEmail.jtp?type=node&node=4659881&i=0><[hidden
>>> email] <http://user/SendEmail.jtp?type=node&node=4659881&i=1>> wrote:
>>>
>>> > Hi everyone (this is my first post on this mailing-list)
>>> >
>>> > I would like to modify an outgoing SOAP Request. I would like to
remove
>>> 2
>>> > xml nodes from the Envelope's body. I managed to set up an Interceptor

>>> and
>>> > get the generated String value of the message set to the endpoint.
>>> >
>>> > However, the following code does not seem to work as the outgoing
>>> message is
>>> > not edited as expected. Does anyone have some code or ideas on how to
do
>>>
>>> > this?
>>> >
>>> > public class MyOutInterceptor extends AbstractSoapInterceptor {
>>> >
>>> > public MyOutInterceptor() {
>>> >        super(Phase.SEND);
>>> > }
>>> >
>>> > public void handleMessage(SoapMessage message) throws Fault {
>>> >        // Get message content for dirty editing...
>>> >        StringWriter writer = new StringWriter();
>>> >        CachedOutputStream cos  =
>>> > (CachedOutputStream)message.getContent(OutputStream.class);
>>> >        InputStream inputStream = cos.getInputStream();
>>> >        IOUtils.copy(inputStream, writer, "UTF-8");
>>> >        String content = writer.toString();
>>> >
>>> >        // remove the substrings from envelope...
>>> >        content =
content.replace("<idJustification>0</idJustification>",
>>>
>>> > "");
>>> >        content = content.replace("<indicRdv>false</indicRdv>", "");
>>> >        ByteArrayOutputStream outputStream = new
ByteArrayOutputStream();
>>>
>>> >        outputStream.write(content.getBytes(Charset.forName("UTF-8")));

>>> >        message.setContent(OutputStream.class, outputStream);
>>> > }
>>> >
>>> > Am I missing something? What is a better way to to this?
>>> > It seems too complicated to achieve my pretty simple requirement...
>>> >
>>>
>>>
>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> http://sberyozkin.blogspot.com
>>> Talend - http://www.talend.com
>>>
>>>
>>> ------------------------------
>>>  If you reply to this email, your message will be added to the
discussion
>>> below:
>>>
>>>
>>>
>>>
>>
>>
>



-- 
Sergey Beryozkin

http://sberyozkin.blogspot.com
Talend - http://www.talend.com


------------------------------
 If you reply to this email, your message will be added to the discussion
below:
http://cxf.547215.n5.nabble.com/How-To-Modify-The-Raw-XML-message-of-an-Outbound-CXF-Request-tp4659707p4662049.html
 To unsubscribe from cxf-user, click
here<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=547216&code=dG91dGNvbkBnbWFpbC5jb218NTQ3MjE2fC03MjM4ODg4OTM=>.

Reply via email to