Hi Ruwan,
thansk for the quick reply, I think you are right but sadly I also think
there is a but the prevent it to be copied correclty. I did what you said
witht he ContentType and I also did a java mediator and both give the same
result. I trace the program step by step in debuger mode and found the
following (I'm using the trunck from early this week):
When Axis2FlexibleMEPClient.java axisOutMsgCtx see:
MessageContext axisOutMsgCtx = cloneForSend(originalInMsgCtx);
The result is that the axisOutMsgCtx does not contains the properties
anymore :( since only properties explicitely state are copied over. This
could be done in two places:
private static MessageContext cloneForSend(MessageContext ori) throws
AxisFault {
MessageContext newMC = MessageHelper.clonePartially(ori);
newMC.setEnvelope(ori.getEnvelope());
removeAddressingHeaders(newMC);
newMC.setProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS,
ori.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS));
// FIX for content type
newMC.setProperty(Constants.Configuration.CONTENT_TYPE,
ori.getProperty(Constants.Configuration.CONTENT_TYPE));
return newMC;
}
Or in MessageHelper.java
org.apache.axis2.context.MessageContext ori) throws AxisFault {
org.apache.axis2.context.MessageContext newMC
= new org.apache.axis2.context.MessageContext();
// do not copy options from the original
newMC.setConfigurationContext(ori.getConfigurationContext());
newMC.setMessageID(UUIDGenerator.getUUID());
newMC.setTo(ori.getTo());
newMC.setSoapAction(ori.getSoapAction());
newMC.setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,
ori.getProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING));
newMC.setProperty(org.apache.axis2.Constants.Configuration.ENABLE_MTOM,
ori.getProperty(org.apache.axis2.Constants.Configuration.ENABLE_MTOM));
newMC.setProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA,
ori.getProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA));
newMC.setProperty(Constants.Configuration.HTTP_METHOD,
ori.getProperty(Constants.Configuration.HTTP_METHOD));
//coping the Message type from req to res to get the message
formatters working correctly.
newMC.setProperty(Constants.Configuration.MESSAGE_TYPE,
ori.getProperty(Constants.Configuration.MESSAGE_TYPE));
// FIX for content type
newMC.setProperty(Constants.Configuration.CONTENT_TYPE,
ori.getProperty(Constants.Configuration.CONTENT_TYPE));
Both fix work just fine with the following defintion:
<definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- filtering of messages with XPath and regex matches -->
<filter source="get-property('To')" regex=".*/xyz.*">
<property name="ContentType" value="application/vnd.xyz.xml"
scope="axis2"/>
<send>
<endpoint>
<address uri="http://10.4.3.110:1563/xyz" format="pox"/>
</endpoint>
</send>
<drop/>
</filter>
<send/>
</definitions>
Let me know what you think or anyone else and if I should report this as a
bug.
Thanks
Sylvain
On Fri, May 9, 2008 at 9:30 PM, Ruwan Linton <[EMAIL PROTECTED]> wrote:
> Hi Sylvain,
>
> I am afraid, the property name contentType has to be modified as
> ContentType. [first letter capitalized] messageType remains as it is.
>
> Thanks,
> Ruwan
>
> On Sat, May 10, 2008 at 6:51 AM, Ruwan Linton <[EMAIL PROTECTED]>
> wrote:
>
> > Hi Sylvain,
> >
> > Please see my comments in-line;
> >
> > On Fri, May 9, 2008 at 11:55 PM, Sylvain Legault <[EMAIL PROTECTED]>
> > wrote:
> >
> >> Hi,
> >>
> >> I'm trying to do a simple XML proxy were the contenttype is not
> >> application/xml but rather application/vnd.xyz.xml where is xyz may be
> few
> >> different values but in this case let's assume it is xyz.
> >>
> >> First I found that I needed to modify my axis2.xml (is there another
> >> way?),
> >> otherwise I get that the incoming HTTP post is not SOAP and there is no
> >> Envelope
> >
> >
> > No there is no other way to tell Synapse that this message has to be
> built
> > using this message builder. So you have to have that mapping.
> >
> >
> >> <messageFormatters>
> >> :::
> >> <messageFormatter contentType="application/vnd.xyzxml"
> >> class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
> >> </messageFormatters>
> >> <messageBuilders>
> >> :::
> >> <messageBuilder contentType="application/vnd.xyz.xml"
> >> class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
> >> </messageBuilders>
> >>
> >> I'm also using the following definition
> >>
> >> <definitions xmlns="http://ws.apache.org/ns/synapse">
> >> <!-- filtering of messages with XPath and regex matches -->
> >> <filter source="get-property('To')" regex=".*/xyz.*">
> >
> > <property name="messageType" value="application/vnd.xyzxml"
> > scope="axis2"/>
> > <property name="contentType" value="application/vnd.xyzxml"
> > scope="axis2"/>
> >
> >>
> >> <send>
> >> <endpoint>
> >> <address uri="*http://10.4.3.110:1563/xyz*"
> format="pox"/>
> >> </endpoint>
> >> </send>
> >> <drop/>
> >> </filter>
> >> <send/>
> >> </definitions>
> >>
> >> My problem is that the message goes thru but ended up on the other side
> >> with
> >> application/xml.
> >>
> >> I have also try to create my own java mediator with another definition
> but
> >> still fails to change the content type and before I go too far I would
> >> like
> >> to know if anyone had tried it before and how?
> >
> >
> > I have modified the above configuration, and you can try that
> > configuration. I think it will work.
> >
> > Thanks,
> > Ruwan
> >
> > --
> > Ruwan Linton
> > http://www.wso2.org - "Oxygenating the Web Services Platform"
>
>
>
>
> --
> Ruwan Linton
> http://www.wso2.org - "Oxygenating the Web Services Platform"
>