Hi Dimuthu,
 Understood, thanks for the prompted response

Cheers,
Dushan

On Tue, Jan 16, 2018 at 5:12 AM, Dimuthu Leelarathne <[email protected]>
wrote:

> Hi Dushan,
>
> It is an optional mediator. We haven't touched the core (not a single line)
>
> We will provide the performance results on Monday.
>
> thanks,
> Dimuthu
>
>
> On Mon, Jan 15, 2018 at 10:26 PM, Dushan Abeyruwan <[email protected]>
> wrote:
>
>> Hi
>>  Pls provide the diff of the changes you have done.
>>
>> @ESB Team / PPT experts, since there are PPT level changes you need keep
>> watch on performance impact, memory blueprint impact, how the heap usage
>> varies per message size since  (smallest to the largest) + per how the
>> behavior for complex interaction which has clone/iterators etc etc.
>>
>> Cheers,
>> Dushan
>>
>> On Tue, Jan 9, 2018 at 9:38 AM, Hasunie Adikari <[email protected]> wrote:
>>
>>> Hi all,
>>>
>>> As I discussed with Isuru, There are some possible approaches to
>>> overcome the issue.
>>>
>>> 1. Create a new pass through pipe.
>>>    - The data will be written to the pipe by a spawned thread and
>>> current thread will be consuming the data and continuing the message flow.
>>> We went through the pipe creation logic and seemed it tightly coupled with
>>> encoding, decoding methodologies so that it can't be
>>>       implemented at APIM level.
>>>
>>> 2. Change the synapse level logic to get the ByteArrayInputstream and
>>> write it into the response.
>>>    - It can be but have to thoroughly go through and do it carefully
>>> unless the default message flow would be affected.
>>>
>>> 3. Build the message by invoking RelayUtils.buildMessage() at the
>>> validator mediator after successfully parsing all the validators.
>>>     - It will be slightly affected the performance but this is the
>>> straightforward solution at this moment.
>>>
>>> I have improved the code by applying the 3rd option as we discussed.
>>> Setting the PassThroughConstants.BUFFERED_INPUT_STREAM has an effect
>>> now onwards since we changed a way that building the message to achieve the
>>> content aware behavior which seeks the
>>> inputream from the axis2 message context instead of the original
>>> inputstream.
>>>
>>>
>>> Regards
>>> Hasunie
>>>
>>>
>>>
>>> On Tue, Jan 9, 2018 at 4:41 PM, Isuru Udana <[email protected]> wrote:
>>>
>>>> Hi Hasunie,
>>>>
>>>> As we discussed, setting the PassThroughConstants.BUFFERED_INPUT_STREAM
>>>> has no effect on the flow in this case and Passthough Sender still seek
>>>> content from the original input stream which got empty due to this cloning
>>>> logic. That's the reason for this behaviour.
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>> On Tue, Jan 9, 2018 at 11:43 AM, Hasunie Adikari <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi Isuru,
>>>>>
>>>>> As we discussed, I cloned the input stream by consuming the
>>>>> passthrough pipe as in below.
>>>>>
>>>>>
>>>>> if (pipe != null) {
>>>>>             bufferedInputStream = new BufferedInputStream(pipe.getIn
>>>>> putStream());
>>>>>
>>>>>         }
>>>>> ByteArrayOutputStream byteArrayOutputStream = new
>>>>> ByteArrayOutputStream();
>>>>> byte[] buffer = new byte[1024];
>>>>> int len;
>>>>> while ((len = bufferedInputStream.read(buffer)) > -1 ) {
>>>>>     byteArrayOutputStream.write(buffer, 0, len);
>>>>> }
>>>>> byteArrayOutputStream.flush();
>>>>>
>>>>>
>>>>> InputStream is1 = new ByteArrayInputStream(byteArray
>>>>> OutputStream.toByteArray());
>>>>> InputStream is2 = new ByteArrayInputStream(byteArray
>>>>> OutputStream.toByteArray());
>>>>>
>>>>> consume the clones for the validation and set another clone as a
>>>>> buffereInputstream property in the axis2messagecontext.
>>>>>
>>>>> BufferedInputStream bufferedInputStreamOriginal = new
>>>>> BufferedInputStream(inputStreamOriginal);
>>>>> axis2MC.setProperty(PassThroughConstants.BUFFERED_INPUT_STREAM,
>>>>> bufferedInputStreamOriginal);
>>>>>
>>>>> I'm still getting the stream closed issue only for correct the
>>>>> messages which have been passed through multiple validators. If the
>>>>> validators throw an exception, the request is getting build and generate
>>>>> the custom response as expected. It seems like we implemented a way
>>>>> that gets the inputstream from the passthrough pipe for the content
>>>>> unaware flows. Unless it uses to get the inputstream from the
>>>>> messagecontext. It was proven once I attached an empty content aware
>>>>> mediator and test the same flow. I was able to observe the expected
>>>>> behaviour for the same implementation with the content aware mediator.
>>>>>
>>>>> Do we have a way to define cloned input stream as an original
>>>>> inputstream in passthrough pipe?
>>>>>
>>>>>
>>>>> Regards
>>>>> Hasunie
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Jan 3, 2018 at 9:21 AM, Isuru Udana <[email protected]> wrote:
>>>>>
>>>>>> Hi Dushan,
>>>>>>
>>>>>> On Wed, Jan 3, 2018 at 9:06 AM, Dushan Abeyruwan <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Hasunie,
>>>>>>>   Current PTT design would build the message whenever if there is
>>>>>>> content aware mediator available. However IIRC, I did this 
>>>>>>> *message.builder.the
>>>>>>> invoked* thing to cope with the WSO2 ELB we had (a few years ago).
>>>>>>>
>>>>>> No. I think it was *force.passthrough.builder *property which you
>>>>>> introduced for ELB requirement.
>>>>>>
>>>>>> To be honest, that looks ugly isn it (in terms of overall picture).
>>>>>>> Basically, what it does; even if there are content-aware mediators, the
>>>>>>> engine would forcefully ignore that (it was ELB requirement :) ) but for
>>>>>>> APIM I don't think that would be the same, cos we may have to deal with
>>>>>>> many use cases sometimes of cause with content aware flows with API
>>>>>>> compositions etc etc.
>>>>>>>
>>>>>>> So, let's think what we can do here; regex and XML threat protectors
>>>>>>> equally important if security is priority thus,  we would no longer 
>>>>>>> able to
>>>>>>> achieve the same core basic aspect (content none awareness) because, 
>>>>>>> such
>>>>>>> protections required you to walk through the nodes and verify some 
>>>>>>> aspects
>>>>>>> (basically, you need to expand the xml node tree to get result set) in 
>>>>>>> that
>>>>>>> way, it is required the message to be build. Anyway, what I would think 
>>>>>>> the
>>>>>>> best approach here is not to change complete synapse content awareness
>>>>>>> logic rather I would think you may have mediator in place but only if 
>>>>>>> such
>>>>>>> protection engaged that may build the message to get XML inforset 
>>>>>>> (rather
>>>>>>> build through root, may be you can mark this meditor as content-aware
>>>>>>> false, then build if message not already build prior to process)
>>>>>>>
>>>>>>> IMO, lets just not complicate the what we try to build around
>>>>>>> message validation. I mean if we need such protection we may need to
>>>>>>> sacrify some aspects am I?
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Dushan
>>>>>>>
>>>>>>> On Tue, Jan 2, 2018 at 8:08 AM, Vinod Kavinda <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Hasunie,
>>>>>>>>
>>>>>>>> This is expected since the synapse engine now expecting an already
>>>>>>>> built message. If I understood your requirement correctly, one option 
>>>>>>>> is to
>>>>>>>> use a Builder Mediator before using any content aware mediator. Even 
>>>>>>>> though
>>>>>>>> we do not recommend the Builder mediators now, still we can use it for 
>>>>>>>> your
>>>>>>>> specific use case. Or you have to revert the
>>>>>>>> *message.builder.invoked *property to *false *again*.*
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Vinod
>>>>>>>>
>>>>>>>> On Tue, Jan 2, 2018 at 5:22 PM, Hasunie Adikari <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I'm trying to combine SQL injection(Regex) threat protector with
>>>>>>>>> the XML threat protector. So I created a sequence[1] with
>>>>>>>>> XMLthreatprotector mediator and regex mediator consecutively and 
>>>>>>>>> uploaded
>>>>>>>>> it to be able to validate the request message through both the
>>>>>>>>> xml validator and regex validators. If I set the
>>>>>>>>> *message.builder.invoked *property to *TRUE *in xml validator
>>>>>>>>> mediator to avoid sending the content in pass-through
>>>>>>>>> pipe(request message) as the response, Regex mediators is getting 
>>>>>>>>> failed.
>>>>>>>>> The regex mediator was designed a way that the incoming messages are 
>>>>>>>>> built
>>>>>>>>> in synapse level and eveluate the message content at the mediator
>>>>>>>>> level. It seems like we can't continue any mediators which are 
>>>>>>>>> required to
>>>>>>>>> get the message content, after we manually set the aforementioned 
>>>>>>>>> property
>>>>>>>>> to true in the previous mediator. If I set it to true, RelayUtill 
>>>>>>>>> will skip
>>>>>>>>> building the message as in here [2]. Any thoughts regarding the issue.
>>>>>>>>> I'm currently working on the issue to be able to combine regex and XML
>>>>>>>>> threat protectors.
>>>>>>>>> [2]
>>>>>>>>>
>>>>>>>>> if (pipe != null
>>>>>>>>>     && !Boolean.TRUE.equals(messageContext
>>>>>>>>>                                     
>>>>>>>>> .getProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED)) && 
>>>>>>>>> forcePTBuild) {
>>>>>>>>>     InputStream in = pipe.getInputStream();
>>>>>>>>>
>>>>>>>>>     Object http_sc = 
>>>>>>>>> messageContext.getProperty(NhttpConstants.HTTP_SC);
>>>>>>>>>     if (http_sc != null && http_sc instanceof Integer && 
>>>>>>>>> http_sc.equals(202)) {
>>>>>>>>>         
>>>>>>>>> messageContext.setProperty(PassThroughConstants.MESSAGE_BUILDER_INVOKED,
>>>>>>>>>                                    Boolean.TRUE);
>>>>>>>>>         return;
>>>>>>>>>     }
>>>>>>>>>
>>>>>>>>>     builldMessage(messageContext, earlyBuild, in);
>>>>>>>>>     return;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> [1]
>>>>>>>>> <sequence xmlns="http://ws.apache.org/ns/synapse";
>>>>>>>>> name="validator">
>>>>>>>>>     <property name="threatType" 
>>>>>>>>> expression="get-property('threatType')"
>>>>>>>>> value="SQL-Injection and XML validator"/>
>>>>>>>>>     <property>
>>>>>>>>>     <property>
>>>>>>>>>      --------
>>>>>>>>>     <switch source="get-property('To')">
>>>>>>>>>        --------------
>>>>>>>>>     </switch>
>>>>>>>>>     *<class
>>>>>>>>> name="org.wso2.carbon.apimgt.gateway.mediators.XMLSchemaValidator"/>*
>>>>>>>>>     <property name="enabledCheckPathParams"
>>>>>>>>> expression="get-property('enabledCheckPathParams')" value="true"/>
>>>>>>>>>     <property>
>>>>>>>>>     <property>
>>>>>>>>>      --
>>>>>>>>>     *<class
>>>>>>>>> name="org.wso2.carbon.apimgt.gateway.mediators.RegularExpressionProtector"/>*
>>>>>>>>>     <filter source="get-property('threat')" regex=".*error.*">
>>>>>>>>>         <then>
>>>>>>>>>             <sequence key="_threat_fault_"></sequence>
>>>>>>>>>         </then>
>>>>>>>>>     </filter>
>>>>>>>>> </sequence>
>>>>>>>>>
>>>>>>>>> Regards
>>>>>>>>> Hasunie
>>>>>>>>>
>>>>>>>>> On Fri, Dec 22, 2017 at 5:14 PM, Hasunie Adikari <[email protected]
>>>>>>>>> > wrote:
>>>>>>>>>
>>>>>>>>>> Hi all,
>>>>>>>>>>
>>>>>>>>>> I'm working on threat protector feature in APIM. We're actually
>>>>>>>>>> trying to achieve here is to protect both backend resources and 
>>>>>>>>>> gateway
>>>>>>>>>> from the XML and JSON based attacks. The Balerina based APIM 3 
>>>>>>>>>> gateway will
>>>>>>>>>> be protected by threat handlers. But In here
>>>>>>>>>> APIM 2.1.x we have implemented mediators to achieve it.
>>>>>>>>>>
>>>>>>>>>> If we allow building the request message at the synapse level, It
>>>>>>>>>> will definitely affect the gateway, All the request messages which go
>>>>>>>>>> through the mediators are built since the Abstarctemediator is 
>>>>>>>>>> designed a
>>>>>>>>>> way that the isContentAware method always returns true. So we set it 
>>>>>>>>>> to
>>>>>>>>>> false in both XML and JSON validator mediators and allow to parse the
>>>>>>>>>> XML request via a third party StAX parser called woodstox hence it 
>>>>>>>>>> was the
>>>>>>>>>> best option among other StAX parsers for threat protection features. 
>>>>>>>>>> It
>>>>>>>>>> will keep counting the given limits and when the limit is exceeded, 
>>>>>>>>>> It will
>>>>>>>>>> terminate the process and throw a meaningful exception. I have 
>>>>>>>>>> created a
>>>>>>>>>> custom threat sequence(thrat_fault) and If a threat is detected by 
>>>>>>>>>> getting
>>>>>>>>>> an exception I configured to direct the response through the custom 
>>>>>>>>>> error
>>>>>>>>>> sequence.
>>>>>>>>>> I reuse the same custom sequence which was implemented for the
>>>>>>>>>> regex threat protector [1]
>>>>>>>>>>
>>>>>>>>>> Woodstox parser covers most of the vulnerabilities as in here
>>>>>>>>>>
>>>>>>>>>> *Vulnerablity:*
>>>>>>>>>>
>>>>>>>>>> *xml bomb* - DTD disabling
>>>>>>>>>>
>>>>>>>>>> *external entity attack* - disabling external entities.
>>>>>>>>>>
>>>>>>>>>> Note :
>>>>>>>>>> Apart from the mediator level, The external entity
>>>>>>>>>> reference property was disabled from the DOM parsers at the synapse 
>>>>>>>>>> level
>>>>>>>>>> as well.
>>>>>>>>>>
>>>>>>>>>> import org.apache.xerces.impl.Constants;
>>>>>>>>>>
>>>>>>>>>> private static final int ENTITY_EXPANSION_LIMIT = 0;
>>>>>>>>>> private static final DocumentBuilderFactory
>>>>>>>>>> documentBuilderFactory =
>>>>>>>>>>    DocumentBuilderFactory.newInstance();
>>>>>>>>>>
>>>>>>>>>> static {
>>>>>>>>>>    documentBuilderFactory.setNamespaceAware(true);
>>>>>>>>>>    documentBuilderFactory.setXIncludeAware(false);
>>>>>>>>>>    documentBuilderFactory.setExpandEntityReferences(false);
>>>>>>>>>>
>>>>>>>>>>    try {
>>>>>>>>>>        documentBuilderFactory.setFeature(Constants.SAX_FEATU
>>>>>>>>>> RE_PREFIX +
>>>>>>>>>>            Constants.EXTERNAL_GENERAL_ENTITIES_FEATURE, false);
>>>>>>>>>>    } catch (ParserConfigurationException e) {
>>>>>>>>>>
>>>>>>>>>> *Buffer overflow attack* - by limiting the count of elements,
>>>>>>>>>> children and length of attributes/keys/values.
>>>>>>>>>>
>>>>>>>>>> *woodstox properties:*
>>>>>>>>>> dtdEnabled
>>>>>>>>>> externalEntitiesEnabled
>>>>>>>>>> maxDepth
>>>>>>>>>> maxElementCount
>>>>>>>>>> maxAttributeCount
>>>>>>>>>> maxAttributeLength
>>>>>>>>>> entityExpansionLimit
>>>>>>>>>> maxChildrenPerElement
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> For thwart cohesive attacks, we use both schema validator and
>>>>>>>>>> depth limits. Ideally, only the woodstox validator should detect the
>>>>>>>>>> cohesive attacks by exceeding the defined depth limit. But the schema
>>>>>>>>>> validator will protect the schema poising attacks in the second step 
>>>>>>>>>> as
>>>>>>>>>> well.
>>>>>>>>>>
>>>>>>>>>> I observed an issue when It comes to combining each
>>>>>>>>>> other(woodstox+ schema validator). We have designed the feature in 
>>>>>>>>>> such a
>>>>>>>>>> way that gets the inputstream from the message context and consumes 
>>>>>>>>>> it in
>>>>>>>>>> the woodstox validator. but in here we have to consume the input 
>>>>>>>>>> stream
>>>>>>>>>> again for the schema validation just after passing through the
>>>>>>>>>> woodstox.That was the issue and I tried the following methodologies 
>>>>>>>>>> to
>>>>>>>>>> resolved the issue
>>>>>>>>>>
>>>>>>>>>> 1. try to get the XML object from the woodstox parser to be able
>>>>>>>>>> to avoid using the input stream again.
>>>>>>>>>> 2. deep clone the inputstream and use cloned input stream for the
>>>>>>>>>> schema validation.
>>>>>>>>>> 3. reset, mark the buffered input stream(synapse engine also has
>>>>>>>>>> done rest, mark)
>>>>>>>>>>
>>>>>>>>>> 1st one was taken time and much complex to get the XML object
>>>>>>>>>> since Woodstock is based on the StAX parsers and also deep cloning 
>>>>>>>>>> was not
>>>>>>>>>> working properly and experienced the same issue after cloning the
>>>>>>>>>> inputstream. But the 3rd option makes life easy so I implemented a 
>>>>>>>>>> way that
>>>>>>>>>> returning the buffered input stream, after doing the rest, mark,  
>>>>>>>>>> then It
>>>>>>>>>> works properly. I went through the RelayUtil message builders [2] 
>>>>>>>>>> and It
>>>>>>>>>> also uses the mark and reset methodology and return InputStream.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I observed another issue once the validator throws an exception,
>>>>>>>>>> the server hanged and didn't get any response and getting timeout 
>>>>>>>>>> issue. I
>>>>>>>>>> was able to figure it out and Issue occurred while trying to build 
>>>>>>>>>> the
>>>>>>>>>> request message in Relayutil.buildmessage().But Ideally, If we get 
>>>>>>>>>> an error
>>>>>>>>>> we don't need the request message anymore. As I discussed offline 
>>>>>>>>>> with the
>>>>>>>>>> APIM team, I used the *consumeAndDiscardMessage* method to
>>>>>>>>>> discard the request message from the message context and set 
>>>>>>>>>> *message.builder.invoked
>>>>>>>>>> *property to *TRUE. *It needs to be set to avoid sending the
>>>>>>>>>> content in pass-through pipe (request message) as the response.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> [1] https://docs.wso2.com/display/AM210/Regular+Expression+T
>>>>>>>>>> hreat+Protection+for+API+Gateway
>>>>>>>>>> [2] https://github.com/wso2/wso2-synapse/blob/master/modules
>>>>>>>>>> /transports/core/nhttp/src/main/java/org/apache/synapse/tran
>>>>>>>>>> sport/passthru/util/RelayUtils.java#L121
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Regards
>>>>>>>>>> Hasunie
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> *Hasunie Adikari*
>>>>>>>>>> Senior Software Engineer
>>>>>>>>>> WSO2 Inc.; http://wso2.com
>>>>>>>>>> lean.enterprise.middleware
>>>>>>>>>> blog http://hasuniea.blogspot.com | https://medium.com/@Hasunie/
>>>>>>>>>> Mobile:+94713095876 <+94%2071%20309%205876>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> *Hasunie Adikari*
>>>>>>>>> Senior Software Engineer
>>>>>>>>> WSO2 Inc.; http://wso2.com
>>>>>>>>> lean.enterprise.middleware
>>>>>>>>> blog http://hasuniea.blogspot.com | https://medium.com/@Hasunie/
>>>>>>>>> Mobile:+94713095876 <+94%2071%20309%205876>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Vinod Kavinda
>>>>>>>> Senior Software Engineer
>>>>>>>> *WSO2 Inc. - lean . enterprise . middleware <http://www.wso2.com>.*
>>>>>>>> Mobile : +94 (0) 712 415544
>>>>>>>> Blog : http://soatechflicks.blogspot.com/
>>>>>>>> [image: http://wso2.com/signature]
>>>>>>>> <http://wso2.com/signature>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Dushan Abeyruwan | Architect
>>>>>>> Technical Support,MV
>>>>>>> PMC Member Apache Synpase
>>>>>>> WSO2 Inc. http://wso2.com/
>>>>>>> Blog:*http://www.dushantech.com/ <http://www.dushantech.com/>*
>>>>>>> LinkedIn:*https://www.linkedin.com/in/dushanabeyruwan
>>>>>>> <https://www.linkedin.com/in/dushanabeyruwan>*
>>>>>>> Mobile:(001)408-791-9312 <+1%20408-791-9312>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Isuru Udana*
>>>>>> Senior Technical Lead
>>>>>> WSO2 Inc.; http://wso2.com
>>>>>> email: [email protected] cell: +94 77 3791887 <+94%2077%20379%201887>
>>>>>> blog: http://mytecheye.blogspot.com/
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Hasunie Adikari*
>>>>> Senior Software Engineer
>>>>> WSO2 Inc.; http://wso2.com
>>>>> lean.enterprise.middleware
>>>>> blog http://hasuniea.blogspot.com | https://medium.com/@Hasunie/
>>>>> Mobile:+94713095876 <071%20309%205876>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> *Isuru Udana*
>>>> Senior Technical Lead
>>>> WSO2 Inc.; http://wso2.com
>>>> email: [email protected] cell: +94 77 3791887 <+94%2077%20379%201887>
>>>> blog: http://mytecheye.blogspot.com/
>>>>
>>>
>>>
>>>
>>> --
>>> *Hasunie Adikari*
>>> Senior Software Engineer
>>> WSO2 Inc.; http://wso2.com
>>> lean.enterprise.middleware
>>> blog http://hasuniea.blogspot.com | https://medium.com/@Hasunie/
>>> Mobile:+94713095876 <+94%2071%20309%205876>
>>>
>>>
>>
>>
>> --
>> Dushan Abeyruwan | Architect
>> Technical Support,MV
>> PMC Member Apache Synpase
>> WSO2 Inc. http://wso2.com/
>> Blog:*http://www.dushantech.com/ <http://www.dushantech.com/>*
>> LinkedIn:*https://www.linkedin.com/in/dushanabeyruwan
>> <https://www.linkedin.com/in/dushanabeyruwan>*
>> Mobile:(001)408-791-9312 <+1%20408-791-9312>
>>
>>
>
>
> --
> Dimuthu Leelarathne
> Director, Solutions Architecture
>
> WSO2, Inc. (http://wso2.com)
> email: [email protected]
> Mobile: +94773661935 <+94%2077%20366%201935>
> Blog: http://muthulee.blogspot.com
>
> Lean . Enterprise . Middleware
>



-- 
Dushan Abeyruwan | Architect
Technical Support,MV
PMC Member Apache Synpase
WSO2 Inc. http://wso2.com/
Blog:*http://www.dushantech.com/ <http://www.dushantech.com/>*
LinkedIn:*https://www.linkedin.com/in/dushanabeyruwan
<https://www.linkedin.com/in/dushanabeyruwan>*
Mobile:(001)408-791-9312
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to