Hi Senaka *public OMNode lookup(String key)*, only imply that for a given key you will get a resource as a OMNode . You will not get any guarantee that some other registry implementation will handle binary and pain text as the way we are handling now. For example, someone can ignore completely binary and pain text and return null if he only wants to use xml content or someone may wraps the OMText with another OMElement and return that OMElement as result. Very simply, *public OMNode lookup(String key) *never expose the restriction to make sure that binary content and plain text content are always wrapped inside a OMText as it is completely implementation specific.

But one guarantee, currently all registry implementation behave as you expected.

We discourage to use lookup(String key) method . Instead, you should use *public Object getResource(Entry entry) *method to access registry resources . It is the method that implements "the core Registry lookup algorithm". All the caching at registry level will do there. Please look at that. (AbstractRegistry)

You can use that API as follows

Entry entry = new Entry(key);

entry.setType(Entry.REMOTE_ENTRY);

regsirty.getResource(enrty);

Entry has methods to set cache expiryTime , etc.

If you can cache entry in somewhere, you can use it whenever you need to access content of the resource. In synapse , we are caching those at SynapseConfiguration.

To ensure that binary and text content would be accessed in a consistent way with any registry implementation, we can move, the logic of binary content handling to the *getResource(Entry entry) *where the lookup algorithm has been already there. By doing that we can enforce that all registry implementation will behave in a consistent way (binary and text content handling and lookup algorithm).

Then we have to change

public Object lookup(String key);

To

public InputStream lookup(String key);

This is just for avoiding misusing lookup(String key) method . Now , this method is not depended on implementation ...always return a Stream

Actually, in the current implementation, if you are using this method, there is no caching, no entry mapping to endpoint, and sequence at registry level, etc. To get that, you have to use *getResource(Entry entry)*. Actually, lookup method is a just helper method to *getResource(Entry entry)* . Within, SynapseConfiguration, we only use *getResource(Entry entry)*.

In additions, to ensure that resource handling is consistent, we have two options,

We can make Registry interface is an abstract class and add *getResource(Entry entry) *implementation to that and make that method as final. Then, any registry implementation have to extend this and cannot override *getResource(Entry entry) *as it final. And also this add is-a relationship.

We can make existing method of getResource(Entry entry) implementation at AbstractRegistry as a final method so that it cannot be overridden. Then, it needs to document that use AbstractRegistry and extend it instead of implementing Registry interface, whenever write a registry implementation.

One thing to note, To covert a object into a Stream , you can use SynapseConfigUtils. getInputStream(Object o) . Please look at that.

Then code look like...

Entry entry = new Entry(key);

entry.setType(Entry.REMOTE_ENTRY);

Object resource = regsirty.getResource(enrty);

InputStream in = SynapseConfigUtils. getInputStream(resource);

Thanks
Indika

Senaka Fernando wrote:
Hi Indika,

Yep, the latest fix seem to solve my problem. Btw, one more question. I managed to read the contents of the DataHandler in the following manner.

OMNode textNode = registry.lookup(registryKey);
DataHandler dh = (DataHandler)(((OMText)textNode).getDataHandler());
BufferedReader br = new BufferedReader(new InputStreamReader((InputStream)(dh.getContent())));

Do all Registries implemented by WSO2ESB or any in the future do confirm to this layout? That means, am I certain that I can read non-XML content from any registry in this manner?

Thanks,
Senaka

2008/8/10 Indika Kumara <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>

    Hi Senaka

    There was an issue as there are no parent for wrapping OMText
    Element that used to wrap binary and plain text as a DataHandler.
    As I can remember , I had tested this scenario when I was adding
    handling binary and plain text . But , there was no
    result.detach() method at that svn revision. It seems that this
    (result.detach()) was added for fixing an issue and after that it
    seems to forget to test a scenario accessing resources with binary
    and plain text content.

    I have fixed this and update sample 350 to demonstrates this. That
    sample use Java script files in native form.

    Please update both synapse and ESB source and try out your
    scenario again.

    Thanks
    Indika


    Senaka Fernando wrote:
    Hi all,

    Recently when working on the ESB Registry,
    (org.wso2.esb.registry.ESBRegistry), I discovered that I can
    quite easily obtain the contents of an XML file using a
    lookup(String). According to the implementation, it also seems to
    handle non-XML file types (ex:- .txt) as well, and creates a
    OMText along with the file attached as a DataHandler to it. Did I
    get this correct? or am I mistaken?

    If I got it right, it works fine upto, result.detach(). At this
    point I get an exception,

    org.apache.axiom.om.OMException: Elements that doesn't have a
    parent can not be detached
        at
    org.apache.axiom.om.impl.llom.OMNodeImpl.detach(OMNodeImpl.java:195)
        at org.wso2.esb.registry.ESBRegistry.lookup(ESBRegistry.java:207)
        at
    
org.sciflex.plugins.synapse.esper.mediators.AxiomMediator.mediate(AxiomMediator.java:221)
        at
    
org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
        at
    
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:58)
        at
    
org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:95)
        at
    
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:58)
        at
    org.apache.synapse.mediators.filters.InMediator.mediate(InMediator.java:60)
        at
    
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:58)
        at
    
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:125)
        at
    
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:176)
        at
    
org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:89)
        at
    org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:170)
        at
    
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
        at
    
org.apache.synapse.transport.nhttp.ServerWorker.processPost(ServerWorker.java:244)
        at
    org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:185)
        at
    
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at
    
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)

    It might most probably be that I'm making a mistake here. If so,
    can you please tell me how I could for instance read a .txt file
    that I save in the ESBRegistry?

    Thanks,
    Senaka
    No virus found in this incoming message.
Checked by AVG - http://www.avg.com Version: 8.0.138 / Virus Database: 270.6.0/1602 - Release Date: 8/9/2008 1:22 PM ------------------------------------------------------------------------

    _______________________________________________
    Esb-java-dev mailing list
    [email protected] <mailto:[email protected]>
    http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-dev


    _______________________________________________
    Esb-java-dev mailing list
    [email protected] <mailto:[email protected]>
    http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-dev


No virus found in this incoming message.
Checked by AVG - http://www.avg.com Version: 8.0.138 / Virus Database: 270.6.0/1603 - Release Date: 8/10/2008 6:13 PM ------------------------------------------------------------------------

_______________________________________________
Esb-java-dev mailing list
[email protected]
http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-dev

_______________________________________________
Esb-java-dev mailing list
[email protected]
http://mailman.wso2.org/cgi-bin/mailman/listinfo/esb-java-dev

Reply via email to