Fedora exceptions

From Devwiki
Jump to: navigation, search

Can't declare any more prefixes in this context

Reason

If you add JDOM Elements to a JDOM document without declaring the Namespaces you get the following XML:

 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <rdf:Description rdf:about="info:fedora/llgc-id:109">
     <rel:isMemberOf rdf:resource="info:fedora/collection:digitisation" 
                                               xmlns:rel="info:fedora/fedora-system:def/relations-external#"/>
     <rel:isMemberOf rdf:resource="info:fedora/collection:jth" 
                                               xmlns:rel="info:fedora/fedora-system:def/relations-external#"/>
     <oai:itemID xmlns:oai="http://www.openarchives.org/OAI/2.0/">oai:llgc.org.uk:llgc-id:109</oai:itemID>
   </rdf:Description>
 </rdf:RDF>

Example Code

 Namespace REL = Namespace.getNamespace("rel", "info:fedora/fedora-system:def/relations-external#");
 Element tDesc = this.getDescription();
 Element tRelation = new Element("isMemberOf", REL);
 tRelation.setAttribute("resource", "info:fedora/" + pPIDofCollection, RDF);
 tDesc.addContent(tRelation);

Solution

Add the namespaces to the Root Element of the document to get the following XML:

 <?xml version="1.0" encoding="UTF-8"?>
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
          xmlns:rel="info:fedora/fedora-system:def/relations-external#" 
          xmlns:oai="http://www.openarchives.org/OAI/2.0/">
   <rdf:Description rdf:about="info:fedora/llgc-id:4527">
     <rel:isMemberOf rdf:resource="info:fedora/collection:digitisation" />
     <rel:isMemberOf rdf:resource="info:fedora/collection:jth" />
     <oai:itemID>oai:llgc.org.uk:llgc-id:4527</oai:itemID>
   </rdf:Description>
 </rdf:RDF>

Example Code

 Namespace RDF = Namespace.getNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
 Namespace REL = Namespace.getNamespace("rel", "info:fedora/fedora-system:def/relations-external#");
 Namespace OAI = Namespace.getNamespace("oai", "http://www.openarchives.org/OAI/2.0/");
 _rdf = new Document();
 Element tRoot = new Element("RDF", RDF);
 _rdf.setRootElement(tRoot);
 tRoot.addContent(new Element("Description", RDF));
 tRoot.addNamespaceDeclaration(REL);
 tRoot.addNamespaceDeclaration(OAI);


Back End Exception

 fedora.server.errors.ResourceIndexException: RDF Parse Error.
       at fedora.server.resourceIndex.ResourceIndexImpl.addRelsDatastream(ResourceIndexImpl.java:892)
       at fedora.server.resourceIndex.ResourceIndexImpl.addDatastream(ResourceIndexImpl.java:281)
       at fedora.server.resourceIndex.ResourceIndexImpl.addDigitalObject(ResourceIndexImpl.java:225)
       at fedora.server.resourceIndex.ResourceIndexImpl.modifyDigitalObject(ResourceIndexImpl.java:381)
       at fedora.server.resourceIndex.ResourceIndexModule.modifyDigitalObject(ResourceIndexModule.java:205)
       at fedora.server.storage.DefaultDOManager.doCommit(DefaultDOManager.java:1010)
       at fedora.server.storage.SimpleDOWriter.commit(SimpleDOWriter.java:342)
       at fedora.server.management.DefaultManagement.addDatastream(DefaultManagement.java:447)
       at fedora.server.management.FedoraAPIMBindingSOAPHTTPImpl.addDatastream(FedoraAPIMBindingSOAPHTTPImpl.java:328)
 Caused by: org.trippi.TrippiException: RDF Parse Error.
       at org.trippi.io.RIOTripleIterator.getNext(RIOTripleIterator.java:89)
       at org.trippi.io.RIOTripleIterator.<init>(RIOTripleIterator.java:65)
       at org.trippi.TripleIterator.fromStream(TripleIterator.java:139)
       at org.trippi.TripleIterator.fromStream(TripleIterator.java:147)
       at fedora.server.resourceIndex.ResourceIndexImpl.addRelsDatastream(ResourceIndexImpl.java:886)
       at fedora.server.resourceIndex.ResourceIndexImpl.addDatastream(ResourceIndexImpl.java:281)
       at fedora.server.resourceIndex.ResourceIndexImpl.addDigitalObject(ResourceIndexImpl.java:225)
       at fedora.server.resourceIndex.ResourceIndexImpl.modifyDigitalObject(ResourceIndexImpl.java:381)
       at fedora.server.resourceIndex.ResourceIndexModule.modifyDigitalObject(ResourceIndexModule.java:205)
       at fedora.server.storage.DefaultDOManager.doCommit(DefaultDOManager.java:1010)
       at fedora.server.storage.SimpleDOWriter.commit(SimpleDOWriter.java:342)
       at fedora.server.management.DefaultManagement.addDatastream(DefaultManagement.java:447)
       at fedora.server.management.FedoraAPIMBindingSOAPHTTPImpl.addDatastream(FedoraAPIMBindingSOAPHTTPImpl.java:328)
 Caused by: org.openrdf.rio.ParseException: java.lang.IllegalStateException: can't declare any more prefixes in this context
       at org.openrdf.rio.rdfxml.RdfXmlParser._parse(RdfXmlParser.java:416)
       at org.openrdf.rio.rdfxml.RdfXmlParser.parse(RdfXmlParser.java:363)
       at org.trippi.io.RIOTripleIterator.run(RIOTripleIterator.java:134)
       at java.lang.Thread.run(Thread.java:534)
 Caused by: java.lang.IllegalStateException: can't declare any more prefixes in this context
       at org.xml.sax.helpers.NamespaceSupport$Context.declarePrefix(Unknown Source)
       at org.xml.sax.helpers.NamespaceSupport.declarePrefix(Unknown Source)
       at org.apache.crimson.parser.Parser2.processAttributeNS(Parser2.java:1771)
       at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1620)
       at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
       at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
       at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
       at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
       at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
       at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
       at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
       at org.openrdf.rio.rdfxml.RdfXmlParser._parse(RdfXmlParser.java:409)
       at org.openrdf.rio.rdfxml.RdfXmlParser.parse(RdfXmlParser.java:363)
       at org.trippi.io.RIOTripleIterator.run(RIOTripleIterator.java:134)
       at java.lang.Thread.run(Thread.java:534)

Front End Exception

 AxisFault
  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
  faultSubcode:
  faultString: fedora.server.errors.ResourceIndexException: RDF Parse Error.
  faultActor:
  faultNode:
  faultDetail:
       {http://xml.apache.org/axis/}hostname:teilo.llgc.org.uk
 fedora.server.errors.ResourceIndexException: RDF Parse Error.
       at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
       at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
       at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
       at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
       at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
       at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
       at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
       at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
       at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
       at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
       at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
       at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
       at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
       at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
       at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
       at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
       at org.apache.axis.client.Call.invoke(Call.java:2767)
       at org.apache.axis.client.Call.invoke(Call.java:2443)
       at org.apache.axis.client.Call.invoke(Call.java:2366)
       at org.apache.axis.client.Call.invoke(Call.java:1812)
       at fedora.server.management.FedoraAPIMBindingSOAPHTTPStub.addDatastream(FedoraAPIMBindingSOAPHTTPStub.java:902)
       at fedora.client.APIMStubWrapper$9.construct(APIMStubWrapper.java:761)
       at fedora.client.SwingWorker$2.run(SwingWorker.java:137)
       at java.lang.Thread.run(Thread.java:534)