On Sat, Jan 29, 2011 at 10:01 AM, Subash Chaturanga <[email protected]> wrote: > Hi all, > > I use code the block in FlickrSubscriptionTestCase in one of my service > components, which deals with the UI when subscribing to remote albums from > front end. There I add all images return from the remote album photo streams > (i.e FlickrPhotoStream). > Following is what FlickrPhotoStream does after getting remote images. > > *Image image = new Image();* > * String id = entry.getId().toString();* > * image.setId(id.substring(id.lastIndexOf("/") + 1));* > * image.setTitle(entry.getTitle());* > * image.setLocation(entry.getEnclosureLinkResolvedHref().toString()); > * > * return image;* > > So I just add these to the relevant album node from my service. (i.e > Album.addPicture(image) ); And after successfully adding those images to > local JCR, I am getting the following error long from the class > org.apache.photark.Image. Any idea? > > java.io.IOException: Stream closed > at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:134) > at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) > at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) > at java.io.BufferedInputStream.read(BufferedInputStream.java:317) > at java.io.FilterInputStream.read(FilterInputStream.java:90) > at > org.apache.sanselan.common.byteSources.ByteSourceInputStream.readBlock(ByteSourceInputStream.java:67) > at > org.apache.sanselan.common.byteSources.ByteSourceInputStream.getFirstBlock(ByteSourceInputStream.java:89) > at > org.apache.sanselan.common.byteSources.ByteSourceInputStream.access$100(ByteSourceInputStream.java:24) > at > org.apache.sanselan.common.byteSources.ByteSourceInputStream$CacheReadingInputStream.read(ByteSourceInputStream.java:105) > at org.apache.sanselan.Sanselan.guessFormat(Sanselan.java:144) > at org.apache.sanselan.Sanselan.getImageParser(Sanselan.java:596) > at org.apache.sanselan.Sanselan.getMetadata(Sanselan.java:976) > at org.apache.sanselan.Sanselan.getMetadata(Sanselan.java:923) > at org.apache.sanselan.Sanselan.getMetadata(Sanselan.java:896) > at org.apache.photark.util.ImageMetadataScanner.scanImageMetadata(* > ImageMetadataScanner.java:44*) > at org.apache.photark.Image.getImageMetadata(*Image.java:169*) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.codehaus.jackson.map.ser.BeanPropertyWriter.get(BeanPropertyWriter.java:285) > at > org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:240) > at > org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146) > at > org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118) > at > org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268) > at > org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146) > at > org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118) > at > org.codehaus.jackson.map.ser.ArraySerializers$ObjectArraySerializer.serializeContents(ArraySerializers.java:160) > at > org.codehaus.jackson.map.ser.ArraySerializers$ObjectArraySerializer.serializeContents(ArraySerializers.java:93) > at > org.codehaus.jackson.map.ser.ArraySerializers$AsArraySerializer.serialize(ArraySerializers.java:66) > at > org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296) > at > org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224) > at > org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:1512) > at > org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:1262) > at > org.apache.tuscany.sca.databinding.json.jackson.Object2JSON.transform(Object2JSON.java:56) > at > org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:209) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:116) > at > org.apache.tuscany.sca.core.databinding.transformers.Output2OutputTransformer.transform(Output2OutputTransformer.java:243) > at > org.apache.tuscany.sca.databinding.DefaultTransformerExtensionPoint$LazyPullTransformer.transform(DefaultTransformerExtensionPoint.java:209) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:116) > at > org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediateOutput(MediatorImpl.java:410) > at > org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:87) > at > org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.handleJSONRPCMethodInvocation(JSONRPCServiceServlet.java:307) > at > org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.handleServiceRequest(JSONRPCServiceServlet.java:177) > at > org.apache.tuscany.sca.binding.jsonrpc.provider.JSONRPCServiceServlet.service(JSONRPCServiceServlet.java:96) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.apache.tuscany.sca.host.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:110) > ... > ... > .... >
In Trunk, the Image class try to scan the image stream to harvest image metadata (e.g. EXIF properties), but in this case, images are stored remotely and this fails. In the REST branch the image class is more like a model and the service now have the responsibility to harvest it and do any other logic on top of the data. -- Luciano Resende http://people.apache.org/~lresende http://twitter.com/lresende1975 http://lresende.blogspot.com/
