Figured it out, and fixed it. The problem was not with xmpbox, but with the
fact that project build was bringing in JDOM and Jaxen as part of another
package. Moving Jaxen from the parent project to the package where its
needed took it out of my image and PDF handling package, and fixed the
exception.

Bonus! Removing Jaxen also fixed an error I was experiencing with JPEG
metadata extraction using Drew Noakes' metadata-extractor (
https://github.com/drewnoakes/metadata-extractor).

Eventually all these jars will have to live in a webapp in the same
WEB-INF/lib directory, so I may not be out of the woods yet, but at least I
know where the problem is coming from.

On Thu, Mar 9, 2017 at 1:33 PM, Thad Humphries <[email protected]>
wrote:

> Yes, I can take a stab at that in a few days, after the crunch of my
> current project abates. I'll let you know when it's on GitHub. Thanks.
>
> On Thu, Mar 9, 2017 at 12:43 PM, Tilman Hausherr <[email protected]>
> wrote:
>
>> Can you create a minimal but fully working project with maven? I.e. we'd
>> need code with main, and a pom. I mention this because an additional lib is
>> needed, unless I misunderstood.
>>
>> Tilman
>>
>>
>> Am 09.03.2017 um 16:51 schrieb Thad Humphries:
>>
>>> Here's my code. As I said, it is throwing an exception at "new
>>> DomXmpParser()" and I have no idea why:
>>>
>>>    protected JSONObject getPdfMetadata(byte [] buffer)
>>>        throws IOException, XmpParsingException, JSONException {
>>>      ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
>>>
>>>      JSONObject json = new JSONObject();
>>>      PDDocument document = null;
>>>      try {
>>>        document = PDDocument.load(bais);
>>>        PDDocumentCatalog catalog = document.getDocumentCatalog();
>>>        PDMetadata meta = catalog.getMetadata();
>>>
>>>        if (meta != null) {
>>>          DomXmpParser xmpParser = new DomXmpParser();  // throws
>>> exception
>>>          XMPMetadata metadata = xmpParser.parse(meta.createInp
>>> utStream());
>>>
>>>          DublinCoreSchema dc = metadata.getDublinCoreSchema();
>>>          if (dc != null) {
>>>            JSONObject dcj = new JSONObject();
>>>            dcj.put("Title", dc.getTitle());
>>>            dcj.put("Description", dc.getDescription());
>>>            ...
>>>            json.put("Dublin", dcj);
>>>          }
>>>    ...
>>>
>>> My goal is to return a JSON formatted string to a browser, and display
>>> the
>>> fomatted metadata to the user. So for now I'm getting around this
>>> DomXmpParser exception from DomXmpParser by simply converting the
>>> metadata
>>> to JSON with JSON-java (https://github.com/stleary/JSON-java), and
>>> untangling the namespace, etc. on browser side:
>>>
>>>      PDMetadata meta = catalog.getMetadata();
>>>
>>>        if (meta != null) {
>>>          InputStream is = meta.exportXMPMetadata();
>>>          ByteArrayOutputStream baos = new ByteArrayOutputStream();
>>>          int read = 0;
>>>          byte [] bytes = new byte[8*1024];
>>>          while ((read = is.read(bytes)) != -1) {
>>>            baos.write(bytes, 0, read);
>>>          }
>>>          String string = new String(baos.toByteArray());
>>>          json = XML.toJSONObject(string);
>>>      ...
>>>
>>>
>>> On Wed, Mar 8, 2017 at 10:11 PM, Thad Humphries <
>>> [email protected]>
>>> wrote:
>>>
>>> When I run the org.apache.pdfbox.examples.pdmodel.ExtractMetadata
>>>> example, it works. However when I put the same code into my class, it
>>>> throws an exception when I call "DomXmpParser xmpParser = new
>>>> DomXmpParser();"  The trace is:
>>>>
>>>> java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuil
>>>> derFactory.
>>>> setFeature(Ljava/lang/String;Z)V
>>>> at org.apache.xmpbox.xml.DomXmpParser.<init>(DomXmpParser.java:81)
>>>> at com.jthad.util.image.MetadataExtractor.getPdfMetadata(
>>>> MetadataExtractor.java:170)
>>>> at com. jthad.util.image.TestMetadataExtractor.testPdf0(
>>>> TestMetadataExtractor.java:41)
>>>> ...
>>>>
>>>> Line 81 in DomXmpParser.java is
>>>>
>>>> dbFactory.setFeature("http://apache.org/xml/features/disallo
>>>> w-doctype-decl",
>>>> true);
>>>>
>>>> I am at a loss to understand how "new DomXmpParser()" works from the
>>>> command line but fails when called by a JUnit test in Eclipse.
>>>> ...
>>>>
>>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
> --
> "Hell hath no limits, nor is circumscrib'd In one self-place; but where we
> are is hell, And where hell is, there must we ever be" --Christopher
> Marlowe, *Doctor Faustus* (v. 121-24)
>



-- 
"Hell hath no limits, nor is circumscrib'd In one self-place; but where we
are is hell, And where hell is, there must we ever be" --Christopher
Marlowe, *Doctor Faustus* (v. 121-24)

Reply via email to