diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java index d9a8de4b0cbea4f1c1194eaa0c6fd2a138ada393..25acf002b563dbcd687c524ac9c41627936924e1 100644 --- a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java +++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java @@ -19,7 +19,6 @@ package org.slub.rosetta.dps.repository.plugin; import com.exlibris.core.sdk.strings.StringUtils; import com.exlibris.dps.sdk.techmd.MDExtractorPlugin; -import org.xml.sax.InputSource; import javax.xml.XMLConstants; import javax.xml.transform.Transformer; @@ -27,11 +26,14 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -49,6 +51,7 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract private String mediaconch_binary_path; private String mediaconch_profile_path; private String mediainfo_binary_path; + private final static String MEDIAINFO_XSD = "/transformer.xsl"; private List<String> extractionErrors = new ArrayList<String>(); private List<String> validationLog = new ArrayList<String>(); @@ -137,25 +140,45 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract StringBuilder mediainfo_output= new StringBuilder(); while (line != null) { /* we should patched out, because not allowed to download xsd */ - String regex = " https://mediaarea\\.net/mediainfo/mediainfo.*\\.xsd"; +/* String regex = " https://mediaarea\\.net/mediainfo/mediainfo.*\\.xsd"; +*/ + String regex = "xsi:schemaLocation.*?>"; String line_patched = line.replaceAll( regex, ""); mediainfo_output.append(line_patched); + //mediainfo_output.append(line); line = reader.readLine(); } + File temp_media_output_file = File.createTempFile("mediainfo_", ".xml"); + OutputStream temp_media_outputstream = new FileOutputStream( temp_media_output_file); + OutputStreamWriter temp_media_streamwriter = new OutputStreamWriter( temp_media_outputstream); + temp_media_streamwriter.append( mediainfo_output); + temp_media_streamwriter.close(); /* xslt transform */ - InputStream stylestream = getClass().getResourceAsStream("resources/transformer.xsl"); + InputStream stylestream = getClass().getResourceAsStream(MEDIAINFO_XSD); + File tmp = new File( + String.valueOf(getClass().getResource(MEDIAINFO_XSD)) + ); + System.out.println("Resource="+tmp.getPath()); StreamSource stylesource = new StreamSource( stylestream); + + //stylesource.setPublicId("https://mediaarea.net/mediainfo"); + //stylesource.setSystemId("https://mediaarea.net/mediainfo"); + stylesource.setSystemId( "./resources" + MEDIAINFO_XSD); System.out.println("stylesource, systemID=" + stylesource.getSystemId()); System.out.println("stylesource, publicID=" + stylesource.getPublicId()); // Use a Transformer for output - StreamSource mediainfo_source = new StreamSource(String.valueOf(new InputSource(mediainfo_output.toString()))); + InputStream mediastream = new FileInputStream( temp_media_output_file ); + StreamSource mediainfo_source = new StreamSource( mediastream ); + //stylesource.setPublicId("https://mediaarea.net/mediainfo"); + mediainfo_source.setSystemId( temp_media_output_file); System.out.println("mediainfo_source, systemID=" + mediainfo_source.getSystemId()); System.out.println("mediainfo_source, publicID=" + mediainfo_source.getPublicId()); TransformerFactory tFactory = TransformerFactory.newInstance(); tFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); - tFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); + //tFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); + tFactory.setFeature(XMLConstants.USE_CATALOG, false); Transformer transformer = tFactory.newTransformer(stylesource); /* ok, mediainfo is loaded correctly, and xslt loaded too */ @@ -163,6 +186,7 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract StreamResult result = new StreamResult( debugFile); // StreamResult result = new StreamResult(System.out); /* FIXME , use StringOutputStream */ transformer.transform(mediainfo_source, result); + temp_media_output_file.deleteOnExit(); attributes.put("key", "value"); } catch (InterruptedException e) { Thread.currentThread().interrupt();