Kopieren von Media.PICTURE Dateien via Scirpt
Author: dhd
Publication Date: 12/11/2012 14:18
Hallo Leute,
ich habe folgendes Problem. Ich will mir ein Skript bauen das automatisch eine Medien Datei vom Typ PICTURE kopiert.
Nun hab ich allerdings das Problem, dass ich sobald ich das Picture Element des neuen Media Objekts setzen will (newPicture.setPicture(...)) ein Exception geworfen wird. Exception ist unterhalb des Quellcodes.
Kann mir einer sagen wo mein Fehler liegt oder mach ich da was Grundsätzliches falsch?
Quellcode:
Listable<Media> mediaList = folder.getChildren(Media.class,false);
Iterator<Media> mediaListIterator = mediaList.iterator();
while (mediaListIterator.hasNext())
{
// Bild das überprüft werden soll
MediaImpl mediaPROD = (MediaImpl)mediaListIterator.next();
// Eindeutige ID des Bildes
String uid = mediaPROD.getUid();
// Anhand der ID das Bild im neuen Projekt suchen.
Media media = (Media)b2cMediaStore.getStoreElement(uid, UidType.MEDIASTORE_LEAF);
// Datei noch nicht vorhanden?
if (media == null && mediaPROD.getType() == Media.PICTURE)
{
// Gleichen Ordner im neuen Projekt suchen
MediaFolder b2cRootMediaFolder =
(MediaFolder)b2cMediaStore.getStoreElement(folder.getName(),
UidType.MEDIASTORE_FOLDER);
// Bild aus der Mediendatei laden
Picture picturePROD = mediaPROD.getPicture(language);
// Auflösung ermitteln
Iterator<StoreElement> iterator = picturePROD.getChildren().iterator();
while (iterator.hasNext())
{
Object next2 = iterator.next();
// Handelt es sich um eine Bild Resolution?
if (PictureResolutionImpl.class.isInstance(next2))
{
PictureResolutionImpl impl = (PictureResolutionImpl)next2;
// Displayname ist der Dateiname ohne Extension.
Map<Language,String> lang2DisplayName = new HashMap<Language, String>();
lang2DisplayName.put(language, mediaPROD.getDisplayName(language));
// Media Objekt erstellen.
Media newMedia = b2cRootMediaFolder.createMedia(uid,
mediaPROD.getFilename(),
Media.PICTURE,
false,
lang2DisplayName,
false);
Picture newPicture = newMedia.getPicture(language);
newMedia.setLock(true);
Resolution resolution = impl.getResolution();
InputStream inputStream = picturePROD.getInputStream(resolution);
newPicture.setPicture(resolution,impl.getSize(),
inputStream,
impl.getExtension());
newMedia.save();
newMedia.setLock(false);
}
}
}
}
Exception:
Exception in thread "main" de.espirit.common.io.IoError: java.lang.RuntimeException: - Unable to render RenderedOp for this operation.
at de.espirit.common.imaging.DefaultImageIO.loadImageFromByteArray(DefaultImageIO.java:58)
at de.espirit.common.imaging.j2se14.J2SE14ImageIO.loadImageFromByteArray(J2SE14ImageIO.java:52)
at de.espirit.common.imaging.ImageUtil.loadImageFromByteArray(ImageUtil.java:75)
at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:209)
at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:208)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)
Caused by: java.lang.RuntimeException: - Unable to render RenderedOp for this operation.
at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:813)
at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:853)
at javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2198)
at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2368)
at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2413)
at de.espirit.common.imaging.DefaultImageIO.loadImageFromByteArray(DefaultImageIO.java:48)
at de.espirit.common.imaging.j2se14.J2SE14ImageIO.loadImageFromByteArray(J2SE14ImageIO.java:52)
at de.espirit.common.imaging.ImageUtil.loadImageFromByteArray(ImageUtil.java:75)
at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:209)
at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:208)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)
at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)
at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)
at de.espirit.firstspirit.server.$Proxy21.uploadPicture(Unknown Source)
at de.espirit.firstspirit.store.access.mediastore.PictureImpl.uploadPicture(PictureImpl.java:312)
at de.espirit.firstspirit.store.access.mediastore.PictureImpl.setPicture(PictureImpl.java:186)
at net.o4b.test.CheckRecipeMedia.checkMediaNames(CheckRecipeMedia.java:247)
-
Author: dhd - 12/11/2012 15:37
Hat sich erledigt. Ich habe noch einen zwischenschritt Eingebaut indem ich die Datei erst local abspeicher bevor sie wieder ins FS geschrieben wird. So funktioniert es dann auch.
0
Please sign in to leave a comment.
Comments
1 comment