Skip to content

Commit 1b0aa0f

Browse files
author
Markus M. Geipel
committed
Merge pull request #78 from cboehme/xml-handler-null-ids
Fixed issue #77.
2 parents cd04617 + 81192b6 commit 1b0aa0f

File tree

4 files changed

+44
-12
lines changed

4 files changed

+44
-12
lines changed

src/main/java/org/culturegraph/mf/stream/converter/xml/GenericXmlHandler.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@
3131
/**
3232
* A generic xml reader.
3333
* @author Markus Michael Geipel
34-
*
34+
*
3535
*/
3636
@Description("A generic xml reader")
3737
@In(XmlReceiver.class)
3838
@Out(StreamReceiver.class)
3939
public final class GenericXmlHandler extends DefaultXmlPipe<StreamReceiver> {
40-
40+
4141
private static final Pattern TABS = Pattern.compile("\t+");
4242
private final String recordTagName;
4343
private boolean inRecord;
@@ -55,7 +55,7 @@ public GenericXmlHandler(final String recordTagName) {
5555
super();
5656
this.recordTagName = recordTagName;
5757
}
58-
58+
5959
@Override
6060
public void startElement(final String uri, final String localName, final String qName, final Attributes attributes)
6161
throws SAXException {
@@ -66,7 +66,11 @@ public void startElement(final String uri, final String localName, final String
6666
writeAttributes(attributes);
6767
} else if (localName.equals(recordTagName)) {
6868
final String identifier = attributes.getValue("id");
69-
getReceiver().startRecord(identifier);
69+
if (identifier == null) {
70+
getReceiver().startRecord("");
71+
} else {
72+
getReceiver().startRecord(identifier);
73+
}
7074
writeAttributes(attributes);
7175
inRecord = true;
7276
}

src/test/java/org/culturegraph/mf/stream/converter/xml/GenericXMLHandlerTest.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ public final class GenericXMLHandlerTest {
3636
private ResourceOpener opener;
3737
private XmlDecoder xmlDecoder;
3838
private GenericXmlHandler genericXmlHandler;
39-
39+
4040
@Mock
4141
private StreamReceiver receiver;
42-
42+
4343
@Before
4444
public void setup() {
4545
MockitoAnnotations.initMocks(this);
@@ -50,17 +50,17 @@ public void setup() {
5050
.setReceiver(genericXmlHandler)
5151
.setReceiver(receiver);
5252
}
53-
53+
5454
@After
5555
public void cleanup() {
5656
opener.closeStream();
5757
}
58-
58+
5959
@Test
6060
public void testShouldIgnoreCharDataNotInARecord() {
61-
61+
6262
opener.process(DataFilePath.GENERIC_XML);
63-
63+
6464
final InOrder ordered = inOrder(receiver);
6565
ordered.verify(receiver).startRecord("1");
6666
ordered.verify(receiver).literal("id", "1");
@@ -83,7 +83,27 @@ public void testShouldIgnoreCharDataNotInARecord() {
8383
ordered.verify(receiver).literal("lang", "de");
8484
ordered.verify(receiver).literal("value", "Zweiter Datensatz");
8585
ordered.verify(receiver).endEntity();
86-
ordered.verify(receiver).endRecord();
86+
ordered.verify(receiver).endRecord();
87+
}
88+
89+
@Test
90+
public void testShouldEmitEmptyStringIfRecordTagHasNoIdAttribute() {
91+
92+
opener.process(DataFilePath.DATA_PREFIX + "shouldEmitEmptyStringIfRecordTagHasNoIdAttribute.xml");
93+
94+
final InOrder ordered = inOrder(receiver);
95+
ordered.verify(receiver).startRecord("");
96+
ordered.verify(receiver).endRecord();
8797
}
88-
98+
99+
@Test
100+
public void testShouldEmitValueOfIdAttribute() {
101+
102+
opener.process(DataFilePath.DATA_PREFIX + "shouldEmitValueOfIdAttribute.xml");
103+
104+
final InOrder ordered = inOrder(receiver);
105+
ordered.verify(receiver).startRecord("theRecordID");
106+
ordered.verify(receiver).endRecord();
107+
}
108+
89109
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<testdata>
3+
<record />
4+
</testdata>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<testdata>
3+
<record id="theRecordID" />
4+
</testdata>

0 commit comments

Comments
 (0)