Skip to content

Commit ceebec6

Browse files
committed
Add invalid xml exception
1 parent 7349599 commit ceebec6

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed

src/Exceptions/XmlException.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Scriptotek\Marc\Exceptions;
4+
5+
class XmlException extends \RuntimeException
6+
{
7+
public function __construct($errors)
8+
{
9+
$details = array_map(function($error) {
10+
return $error->message;
11+
}, $errors);
12+
parent::__construct('Failed loading XML: \n' . implode('\n', $details));
13+
}
14+
}

src/Importers/XmlImporter.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Scriptotek\Marc\Importers;
44

55
use Scriptotek\Marc\Collection;
6+
use Scriptotek\Marc\Exceptions\XmlException;
67

78
class XmlImporter
89
{
@@ -17,7 +18,11 @@ public function __construct($data, $ns = '', $isPrefix = false, Collection $coll
1718
$data = file_get_contents($data);
1819
}
1920

21+
libxml_use_internal_errors(true);
2022
$this->source = simplexml_load_string($data, 'SimpleXMLElement', 0, $ns, $isPrefix);
23+
if (false === $this->source) {
24+
throw new XmlException(libxml_get_errors());
25+
}
2126
}
2227

2328
public function getMarcNamespace($namespaces)

tests/InvalidRecordTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
use Scriptotek\Marc\Importers\XmlImporter;
4+
5+
class InvalidRecordTest extends \PHPUnit_Framework_TestCase
6+
{
7+
/**
8+
* @expectedException Scriptotek\Marc\Exceptions\XmlException
9+
*/
10+
public function testAlmaBibsApiExample()
11+
{
12+
// Expect failure because of invalid encoding in XML declaration:
13+
// Document labelled UTF-16 but has UTF-8 content
14+
$response = new XmlImporter('tests/data/alma-bibs-api-invalid.xml');
15+
}
16+
}

tests/data/alma-bibs-api-invalid.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<?xml version="1.0" encoding="UTF-16"?> <record> <leader>01733cam a2200553 u 4500</leader> <controlfield tag="001">990114012304702201</controlfield> <controlfield tag="005">20140827090540.0</controlfield> <controlfield tag="007">ta</controlfield> <controlfield tag="008">140827s2001 xx#|||||||||||000|u|eng|d</controlfield> <datafield ind1=" " ind2=" " tag="020"> <subfield code="a">0471391069</subfield> <subfield code="q">ib.</subfield> </datafield> <datafield ind1=" " ind2=" " tag="035"> <subfield code="a">011401230-47bibsys_ubo</subfield> </datafield> <datafield ind1=" " ind2=" " tag="035"> <subfield code="a">(NO-TrBIB)011401230</subfield> </datafield> <datafield ind1=" " ind2=" " tag="040"> <subfield code="a">NO-TrBIB</subfield> <subfield code="b">nob</subfield> <subfield code="e">katreg</subfield> </datafield> <datafield ind1=" " ind2=" " tag="080"> <subfield code="a">535.6</subfield> </datafield> <datafield ind1=" " ind2=" " tag="080"> <subfield code="a">541.14</subfield> </datafield> <datafield ind1="0" ind2="4" tag="082"> <subfield code="a">535.6</subfield> <subfield code="2">23</subfield> </datafield> <datafield ind1=" " ind2=" " tag="084"> <subfield code="a">a8732q</subfield> <subfield code="q">NoOU</subfield> <subfield code="2">inspec</subfield> </datafield> <datafield ind1=" " ind2=" " tag="084"> <subfield code="a">a8732n</subfield> <subfield code="q">NoOU</subfield> <subfield code="2">inspec</subfield> </datafield> <datafield ind1=" " ind2=" " tag="084"> <subfield code="a">a6170d</subfield> <subfield code="q">NoOU</subfield> <subfield code="2">inspec</subfield> </datafield> <datafield ind1=" " ind2=" " tag="084"> <subfield code="a">a0760d</subfield> <subfield code="q">NoOU</subfield> <subfield code="2">inspec</subfield> </datafield> <datafield ind1=" " ind2=" " tag="097"> <subfield code="a">0.6nas</subfield> <subfield code="9">LOCAL</subfield> </datafield> <datafield ind1=" " ind2=" " tag="097"> <subfield code="a">a0760d</subfield> <subfield code="9">LOCAL</subfield> </datafield> <datafield ind1=" " ind2=" " tag="097"> <subfield code="a">a6170d</subfield> <subfield code="9">LOCAL</subfield> </datafield> <datafield ind1=" " ind2=" " tag="097"> <subfield code="a">a8732n</subfield> <subfield code="9">LOCAL</subfield> </datafield> <datafield ind1=" " ind2=" " tag="097"> <subfield code="a">a8732q</subfield> <subfield code="9">LOCAL</subfield> </datafield> <datafield ind1="1" ind2=" " tag="100"> <subfield code="a">Nassau, Kurt</subfield> </datafield> <datafield ind1="1" ind2="0" tag="245"> <subfield code="a">The physics and chemistry of color :</subfield> <subfield code="b">the fifteen causes of color</subfield> <subfield code="c">Kurt Nassau</subfield> </datafield> <datafield ind1=" " ind2=" " tag="250"> <subfield code="a">2nd ed.</subfield> </datafield> <datafield ind1=" " ind2=" " tag="260"> <subfield code="a">New York</subfield> <subfield code="b">Wiley</subfield> <subfield code="c">c2001</subfield> </datafield> <datafield ind1=" " ind2=" " tag="300"> <subfield code="a">XX, 481 s., pl.</subfield> <subfield code="b">ill.</subfield> </datafield> <datafield ind1="1" ind2=" " tag="490"> <subfield code="a">Wiley series in pure and applied optics</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Fysikalsk kjemi</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Kjemi</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Fotokjemi</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Farger</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Fargelære</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Fysikk</subfield> <subfield code="2">noubomn</subfield> </datafield> <datafield ind1=" " ind2="7" tag="650"> <subfield code="a">Farger</subfield> <subfield code="2">tekord</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">farger</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">fargelære</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">fysikk</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">fysikalsk</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">kjemi</subfield> </datafield> <datafield ind1=" " ind2=" " tag="653"> <subfield code="a">fotokjemi</subfield> </datafield> <datafield ind1=" " ind2="0" tag="830"> <subfield code="a">Wiley series in pure and applied optics</subfield> </datafield> <datafield ind1="4" ind2="2" tag="856"> <subfield code="3">Beskrivelse fra forlaget (kort)</subfield> <subfield code="u">http://content.bibsys.no/content/?type=descr_publ_brief&amp;isbn=0471391069</subfield> </datafield> <datafield ind1="4" ind2="2" tag="856"> <subfield code="3">Beskrivelse fra forlaget (lang)</subfield> <subfield code="u">http://content.bibsys.no/content/?type=descr_publ_full&amp;isbn=0471391069</subfield> </datafield> <datafield ind1="4" ind2="2" tag="856"> <subfield code="3">Omslagsbilde</subfield> <subfield code="u">http://innhold.bibsys.no/bilde/forside/?size=mini&amp;id=0471391069.JPG</subfield> <subfield code="q">image/jpeg</subfield> </datafield> <datafield ind1=" " ind2=" " tag="901"> <subfield code="a">80</subfield> </datafield> </record>

0 commit comments

Comments
 (0)