Sylvain / Ruwan
If you want a property set (e.g. ContentType and messageType) at the
Axis2 message context level (and not synapse level) you must set the
scope attribute to "axis2
<http://synapse.apache.org/Synapse_Configuration_Language.html#property>"..
I think the problem is there?
asankha
Ruwan Linton wrote:
Hi Sylvain,
I hope not just this property, but all the axis2 message context properties
has to be copied by the clonePartially method.
Could you please report this through the JIRA. I will fix it ASAP and we
will be doing a QA build 2 on Monday so that you can test that build for the
verification.
Thanks for pointing this.
Thanks,
Rwuan
On Sat, May 10, 2008 at 4:49 PM, Sylvain Legault <[EMAIL PROTECTED]>
wrote:
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"